Avatar billede dallan2007 Nybegynder
21. januar 2011 - 09:29 Der er 1 kommentar og
1 løsning

Simple ADO-opdatering bryder samme?

Hejsa,

Jeg har en meget simpel ADO-update som kun delvist virker.

Jeg har en form med en memo-box, en knap og de korrekte ADO-dimser til databaseforbindelse til en access-database.

På knappen har jeg følgende:

ADOCommand.CommandText := 'UPDATE kalender SET Allan = :Allan WHERE ID = :nID';
ADOCommand.Parameters.ParamByName('Allan').Value := Memo1.Text;
ADOCommand.Parameters.ParamByName('nID').Value := ValgtDag;
ADOCommand.Execute;
ADOCommand.Free;

Og det virker glimrende første gang, men hvis jeg efterfølgende prøver at lave endnu en opdatering så bryder det sammen. Glemmer jeg at åbne eller lukke et eller andet?
Avatar billede dallan2007 Nybegynder
21. januar 2011 - 09:44 #1
Tror jeg har fundet en løsning.
Avatar billede hrc Mester
21. januar 2011 - 10:52 #2
Tjaa, hvis det er en komponent på formen så skal den ikke frigives. I øvrigt opretter jeg 99% af mine TADOQueries i koden. Synes det fungerer bedst at have tingene samlet - og så altid pænt pakket ind i en try-finally.

Kan anbefale dig at sætte parametrenes datatype da det tvinger varianten (value) til at putte data ind det rette sted. Til dette har jeg SetParam som jeg her opbevarer i et TDataModule:

procedure TDM.SetParam(aDataSet: TCustomADODataSet;
                      const aName: string;
                      const aFieldType: TFieldType;
                      const aValue: Variant;
                      const aSetNull: boolean);
begin
  SetParam(TADODataSet(aDataSet).Parameters.ParamByName(aName),aFieldType,aValue,aSetNull);
end;

procedure TDM.SetParam(aParameter: TParameter;
                      const aValue: Variant;
                      const aSetNull: boolean);
begin
  if aSetNull then
    aParameter.Value := Null
  else
    aParameter.Value := aValue;
end;

procedure TDM.SetParam(aParameter: TParameter;
                      const aFieldType: TFieldType;
                      const aValue: Variant;
                      const aSetNull: boolean);
begin
  aParameter.DataType := aFieldType;
  SetParam(aParameter,aValue,aSetNull);
end;

Bemærk at de er overloadede

Når jeg skal sætte en parameter skriver jeg eksempelvis:

DM.SetParam(Query,'vaerdi',ftInteger,EtHeltal,EtHeltal = 0);

Udtrykket EtHeltal=0 styrer om parameteren skal NULL'es.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester