Avatar billede megabyte_ Nybegynder
14. september 2000 - 09:11 Der er 7 kommentarer og
1 løsning

SQL

Hey hey

okey hvad hr jeg lavet galt her
den siger \"Type mismatch in expression\"

begin
with main.Query1 do
begin
  close;
  SQL.Clear;
  SQL.Add(\'insert into produkt(varenummer, varenavn, pris, lagerbeholdning, varebeskrivelse)VALUES(:Varenummer, :varenavn, :pris, :lagerbeholdning, :varebeskrivelse)\');
  Params[0].AsInteger := strtoint(nyvare.Edit1.Text);        //varenummer
  Params[1].AsString  := nyvare.Edit2.Text;                  //varenavn
  Params[2].AsInteger := strtoint(nyvare.Edit3.Text);        //pris
  Params[3].asstring  := nyvare.Edit4.Text;                  //lagerbeholdning
  Params[4].AsString  := nyvare.Memo1.Lines.GetText;          //varebeskrivelse
  ExecSQL;
end;
main.lagerRxQuery.Close;
main.lagerRxQuery.open;
end;

<MB>
Avatar billede kim_friis Nybegynder
14. september 2000 - 09:23 #1
Blot et lille forslag. Brug ParamByName(\'varenummer\').AsInteger istedet for Params[0] det gør at du kan bytte om på parametrene og stadig være sikker på at du får fat i den rigtige. Mht type mismatch, så er det lidt svært at sige uden at kende dine tabeldefinitioner.

Et andet forslag, istedet for nyvare.Memo1.Lines.getText, så brug Memo1.Lines.Text.

Kim
Avatar billede hlj Nybegynder
14. september 2000 - 10:19 #2
Det vil også være en god ide at checke dine edit felter inder du konverterer til integer.

Evt. med try - except eller StrToIntDef

Du risikerer at dit program crasher hvis du skriver en tekst streng i f.eks. pris feltet
Avatar billede sjensen Nybegynder
14. september 2000 - 10:24 #3
\"Type mismatch\" kommer af den måde du bruger parametrene på. Når du bruger dem sådan som du gør, skal du for TQuery komponentet oprette de 5 params med navne (:Varenummer o.s.v.) i params editoren. Paramseditoren \"creater\" de params du vil bruge og efterfølgende kan du anvende dem.

Alternativt skal du bruge \"createparams\" inden du fylder noget i dem.
Avatar billede megabyte_ Nybegynder
14. september 2000 - 12:36 #4
Welll har lavet en på samme måde til at tilføje kunder med og den virker men hvad fanden er der galt her

<MB>
Avatar billede megabyte_ Nybegynder
14. september 2000 - 12:50 #5
Welll jeg har fundet fejlen
men takker

<MB>
Avatar billede sjensen Nybegynder
14. september 2000 - 13:13 #6
Prøv at lave en showmessage hvor du viser det endelige SQL statement direkte, for at se om det ser fornuftigt ud, eller om der i teksten et eller andet sted er nogle ting der gør at SQlen fejler:

showmessage(\'insert into produkt(varenummer, varenavn, pris, lagerbeholdning, varebeskrivelse)VALUES(\'+strtoint(nyvare.Edit1.Text+\', \"\'+nyvare.Edit2.Text+\'\", \'+strtoint(nyvare.Edit3.Text+\', \"\'+nyvare.Edit4.Text+\'\", \"\'+nyvare.Memo1.Lines.GetText+\'\" )\');

Vær opmærksom på at eftersom tekstfelterne ikke er omkranset af gåseøjne i dit sql (eks.: \":varetekst\" istedet for bare :varetekst) så vil sql delen være forkert hvis der er et komma i vareteksten eller endda bare et mellemrum.

Det kan godt være at du har lavet noget magen til for kunder der vvirker men det er ikke ensbetydende med at det virker for varer og andre registre. Det er ikke kun SQL delen der kan drille, der er sandeligt også de data der arbejdes med. Og det kan du se med showmessage funktionen. Hvis du desuden prøver at fjerne de gåseøjne jeg har med i showmessage, rundt om tekstfelterne, vil du med det samme se om teksten i et af felterne får det til at se ud som om der er flere parametre.
Avatar billede sjensen Nybegynder
14. september 2000 - 13:14 #7
hmm. jeg så ikke dit svar før jeg sendte mit.

Hvad var fejlen så ?
Avatar billede megabyte_ Nybegynder
14. september 2000 - 13:48 #8
Jeg havde glemt at lave lagerbeholdning om til en integer dhoooo :)

<MB>
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