23. juni 2008 - 10:17Der er
5 kommentarer og 1 løsning
Opdatering af ClientDataSet
Jeg har et SQL-script der joiner mellem flere tabeller. Det betyder at nogle felter er R/O mens andre skal skrives til databasen. Jeg har en primærnøgle og behøver ikke lede efter recorden der skal opdateres.
og i TClienDataSet'ets felter er TField.ProviderFlags = [pfInUpdate] for de der skal opdateres, mens primærnøglefeltets står til [pfInUpdate,pfInWhere,pfInKey]. Resten af felterne er [] for de skal ikke med i scriptet der genereres.
Sådan jeg læser den sparsomme dokumentation så er det måden at gøre det på - men det fejler. Primærnøglen er et autoinc-felt og når jeg debugger så er Field.Value = Null og sammenligner jeg adressen på feltet i TClientDataSettet før ApplyUpdate og inde i Provider-unitten, så er adressen forskellig. Desuden er ProviderFlaget pludselig [pfInUpdate,pfInWhere]. Noget kunne tyde på at felterne kopieres, men at der er fejl i kopieringen.
Hvis der sidder en ClientDataSet ekspert kan jeg godt bruge et svar (et brugbart et altså)
Det virker afgjort som en fejl i D2007 - må ind på QC og se om der er postet på denne.
Hvis man går ind i BeforeUpdateRecord kan det løses:
procedure TfrmTest.dspTestTabelBeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean); begin case UpdateKind of ukModify: DeltaDS.FieldByName('ID').ProviderFlags := [pfInWhere,pfInKey]; ukInsert: ; ukDelete: ; end; end;
Nu skal jeg så finde ud af hvordan jeg håndterer oprettelse af en record hvor primærnøglen er et auto-inc felt. Jvf. et gammelt dokument (dn.codegear.com/print/20487) skal jeg sætte den til et negativt tal og autorefreshe - men lad os nu se om det stemmer med virkeligheden...
Det med at sætte primærnøglen som er auto-inc til <0 er noget jeg altid har/skulle brugt i D7 med TClienDataSet inden jeg kan poste, så derfor benytter jeg denne linie i TClientDataSet´s AfterInsert: DataSet.FieldByName('MinID').AsInteger:=-1;
Glem min post, det er noget andet jeg bruger det til.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.