? Oppnå Record låsing med Access 2000

Hvordan implementerer jeg posten låsing på en Access 2000-database ved hjelp av Delphi Har du sett dette på Borland Support Område:? Database \\ adoReference Antall: 74076Status: OpenDate Rapportert 11/3 /99Severity: Vanligvis EncounteredType: Basic Funksjonalitet FailureProblem: Foreløpig gjør pessimistisk posten låseworkwith ikke ADO komponenter fordi ADO doesn'tprovide en måte å låse en annen enn thecurrent record.Well posten er det en måte å låse poster på MSAccess 2 000 tables.First det krever at du har utviklere utgave ofMicrosoft Ado Data Control 6.0 (følger med Visual Studio-programmer) .Hvis du har det så importere den til Delphi bruker Import ActiveXmenu elementet fra Component menyen. Du vil se at ActiveX hasbeen lagt til som Adodc på ActiveX palette.Create et skjema og sette så mange Adodc komponenter på det som du vil needsimultaneous låser. Husk dette: En Adodc kan låse En rekord i One tableat gangen. Så hvis du trenger å låse flere poster på flere bord, willneed du flere Adodc komponenter (du har valget mellom dynamisk opprettelse også) .Deretter opprette en ny tabell i Access MDB og gi den navnet kan si "Lock". Sett twofields i den ("lockid" type String og "fldEdt" type heltall) .Below er to funksjoner. En som heter Lock, som du kan bruke tolock posten, eller sjekke om den er låst. Den andre kalles Unlockand du kan bruke den til å låse opp record.function lock (ds: TAdoConnection; LckTable: TAdodc; const s: string; rec, CurrentUserId: longint): boolean; Var funnet: boolean; s1: string; begynne s1: = format (s, [trim (inttostr (rec))]); LckTable.ConnectionString: = ds.ConnectionString; LckTable.CursorLocation: = 2; LckTable.LockType: = 2; LckTable.CommandType: = 2; LckTable.RecordSource = 'Lock'; funnet: = false; Prøv LckTable.refresh; hvis LckTable.Recordset.RecordCount > 0 da begynne LckTable.Recordset.MoveFirst; ('Lockid =' '' + s1 + '' '', 0,1,1) LckTable.Recordset.Find; slutt; hvis LckTable.Recordset.RecordCount > 0 da hvis ikke (LckTable.Recordset.EOF) så hvis LckTable.Recordset.Fields ['lockid'] value = s1 deretter fnne:. = true; hvis ikke FN da LckTable.Recordset.AddNew ('lockid', s1); LckTable.Recordset.Fields ['fldEdt'] Verdi:. = CurrentUserId; Resultatet: = true; unntatt resultat: = false; end, end, funksjon Unlock (konst s: string; rec: longint; LckTable: TAdodc): boolean; Var s1: string; begynne s1: = format (s, [trim (inttostr (rec))]); prøve LckTable.Recordset.Cancel; ('Lockid =' '' + s1 + '' '', 0,1,0) LckTable.Recordset.Find; LckTable.Recordset.Delete (1); Resultatet: = true; unntatt resultat: = false; enden, Nå må du gjøre noen koding inni project.When kan si en bruker ber om å åpne en rekord (kan si med den unike id 12) fra Customer tabellen. Du har en Tadodc som kalles lckCustomers og islocated på skjemaet som heter lckForm. Bruk denne koden: if Lock (TCustomer.Connection, lckForm.lckCustomers, 'Brukere', 12,1), og start //posten har blitt vellykket låst, og du kan gå videre med din //redigering kode //... endelse begynne //Ther posten ble allready låst av en annen bruker. //Gi en beskjed og avbryte redigeringen, eller fortsette å lese bare. //... Enden, nå hvis du ønsker å låse opp posten, etter redigering bare ringe: Lås opp ('Brukere', 12, lckForm.lckCustomers); Advarsel: Lock tabellen kommer til å bli svært store, så når den første brukeren logger inthe program, tømme låsen tabellen ved hjelp av en spørring som "slette fra lock'.You kan sjekke om du er den første brukeren ved å sjekke for eksistensen av en ldbfile ved siden av MDB-fil. Hvis den ikke finnes, dere er first.That er om det. Lykke til. Anmeldelser



Previous:
Next Page: