r9
Nybegynder
17. februar 2003 - 19:38
Der er
6 kommentarer og 1 løsning
Database probemmer....
Denne kode virker fint første gang den bliver udført. Men anden gang, så fejler det. (Access violation at address....) Hvis man så lukker programmet, og starter det op igen, så virker det igen første gang.... Hvad kan problemmet være? function TDbHandler.OpretKunde(kunde : TKunde): Boolean; begin Result := false; SQLQuery.SQL.Clear; SQLQuery.SQL.Add('INSERT INTO ' + 'Individer (Firmanavn, Cvrnr,'+ 'Cprnr, Titel, Fornavn, Mellemnavn, Efternavn, Gadenavn,'+ 'Husnr, Lejlnr, Etagenr, Postnr, Bynavn, Land, Tlf1, Tlf2,'+ 'Tlf3, Fax1, Fax2, Fax3, Email1, Email2, Email3)' + 'VALUES (:Firmanavn, :Cvrnr,'+ ':Cprnr, :Titel, :Fornavn, :Mellemnavn, :Efternavn, :Gadenavn,'+ ':Husnr, :Lejlnr, :Etagenr, :Postnr, :Bynavn, :Land, :Tlf1,'+ ':Tlf2, :Tlf3, :Fax1, :Fax2, :Fax3, :Email1, :Email2, :Email3)'); SQLQuery.ParamByName('Firmanavn').Value := kunde.Firmanavn; SQLQuery.ParamByName('Cvrnr').Value := kunde.Cvrnr; SQLQuery.ParamByName('Cprnr').Value := kunde.Cprnr; SQLQuery.ParamByName('Titel').Value := kunde.Titel; SQLQuery.ParamByName('Fornavn').Value := kunde.Fornavn; SQLQuery.ParamByName('Mellemnavn').Value := kunde.Mellemnavn; SQLQuery.ParamByName('Efternavn').Value := kunde.Efternavn; SQLQuery.ParamByName('Gadenavn').Value := kunde.Gadenavn; SQLQuery.ParamByName('Husnr').Value := kunde.Husnr; SQLQuery.ParamByName('Lejlnr').Value := kunde.Lejlnr; SQLQuery.ParamByName('Etagenr').Value := kunde.Etagenr; SQLQuery.ParamByName('Postnr').Value := kunde.Postnr; SQLQuery.ParamByName('Bynavn').Value := kunde.Bynavn; SQLQuery.ParamByName('Land').Value := kunde.Land; SQLQuery.ParamByName('Tlf1').Value := kunde.Tlf1; SQLQuery.ParamByName('Tlf2').Value := kunde.Tlf2; SQLQuery.ParamByName('Tlf3').Value := kunde.Tlf3; SQLQuery.ParamByName('Fax1').Value := kunde.Fax1; SQLQuery.ParamByName('Fax2').Value := kunde.Fax2; SQLQuery.ParamByName('Fax3').Value := kunde.Fax3; SQLQuery.ParamByName('Email1').Value := kunde.Email1; SQLQuery.ParamByName('Email2').Value := kunde.Email2; SQLQuery.ParamByName('Email3').Value := kunde.Email3; SQLQuery.ExecSQL; end; Jeg benytter mySQL, TSQLConnection og TSQLQuery fra dbExpress
Annonceindlæg fra Computerworld
r9
Nybegynder
17. februar 2003 - 20:48
#2
Den fejler i denne linje: SQLQuery.SQL.Clear; tKunde er et kunde Objekt: unit Kunde; interface type TKunde = class(TObject) private kFirmanavn : String; kCvrnr : String; kCprnr : String; kTitel : String; kFornavn : String; kMellemnavn : String; kEfternavn : String; kGadenavn : String; kHusnr : String; kLejlnr : String; kEtagenr : String; kPostnr : String; kBynavn : String; kLand : String; kTlf1 : String; kTlf2 : String; kTlf3 : String; kFax1 : String; kFax2 : String; kFax3 : String; kEmail1 : String; kEmail2 : String; kEmail3 : String; procedure setFirmanavn(Text : String); procedure setCvrnr(Text : String); procedure setCprnr(Text : String); procedure setTitel(Text : String); procedure setFornavn(Text : String); procedure setMellemnavn(Text : String); procedure setEfternavn(Text : String); procedure setGadenavn(Text : String); procedure setHusnr(Text : String); procedure setLejlnr(Text : String); procedure setEtagenr(Text : String); procedure setPostnr(Text : String); procedure setBynavn(Text : String); procedure setLand(Text : String); procedure setTlf1(Text : String); procedure setTlf2(Text : String); procedure setTlf3(Text : String); procedure setFax1(Text : String); procedure setFax2(Text : String); procedure setFax3(Text : String); procedure setEmail1(Text : String); procedure setEmail2(Text : String); procedure setEmail3(Text : String); //---------------------------------------------------------------------------- published constructor Create(); property Firmanavn : String read kFirmanavn write setFirmanavn; property Cvrnr : String read kCvrnr write setCvrnr; property Cprnr : String read kCprnr write setCprnr; property Titel : String read kTitel write setTitel; property Fornavn : String read kFornavn write setFornavn; property Mellemnavn : String read kMellemnavn write setMellemnavn; property Efternavn : String read kEfternavn write setEfternavn; property Gadenavn : String read kGadenavn write setGadenavn; property Husnr : String read kHusnr write setHusnr; property Lejlnr : String read kLejlnr write setLejlnr; property Etagenr : String read kEtagenr write setEtagenr; property Postnr : String read kPostnr write setPostnr; property Bynavn : String read kBynavn write setBynavn; property Land : String read kLand write setLand; property Tlf1 : String read kTlf1 write setTlf1; property Tlf2 : String read kTlf2 write setTlf2; property Tlf3 : String read kTlf3 write setTlf3; property Fax1 : String read kFax1 write setFax1; property Fax2 : String read kFax2 write setFax2; property Fax3: String read kFax3 write setFax3; property Email1 : String read kEmail1 write setEmail1; property Email2 : String read kEmail2 write setEmail2; property Email3 : String read kEmail3 write setEmail3; //---------------------------------------------------------------------------- public //---------------------------------------------------------------------------- protected end; //end type //---------------------------------------------------------------------------- implementation uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; constructor TKunde.Create(); begin kFirmanavn := ''; kCvrnr := ''; kCprnr := ''; kTitel := ''; kFornavn := ''; kMellemnavn := ''; kEfternavn := ''; kGadenavn := ''; kHusnr := ''; kLejlnr := ''; kEtagenr := ''; kPostnr := ''; kBynavn := ''; kLand := ''; kTlf1 := ''; kTlf2 := ''; kTlf3 := ''; kFax1 := ''; kFax2 := ''; kFax3 := ''; kEmail1 := ''; kEmail2 := ''; kEmail3 := ''; end; procedure TKunde.setFirmanavn(Text : String); begin kFirmanavn := Text; end; procedure TKunde.setCvrnr(Text : String); begin kCvrnr := Text; end; procedure TKunde.setCprnr(Text : String); begin kCprnr := Text; end; procedure TKunde.setTitel(Text : String); begin kTitel := Text; end; procedure TKunde.setFornavn(Text : String); begin kFornavn := Text; end; procedure TKunde.setMellemnavn(Text : String); begin kMellemnavn := Text; end; procedure TKunde.setEfternavn(Text : String); begin kEfternavn := Text; end; procedure TKunde.setGadenavn(Text : String); begin kGadenavn := Text; end; procedure TKunde.setHusnr(Text : String); begin kHusnr := Text; end; procedure TKunde.setLejlnr(Text : String); begin kLejlnr := Text; end; procedure TKunde.setEtagenr(Text : String); begin kEtagenr := Text; end; procedure TKunde.setPostnr(Text : String); begin kPostnr := Text; end; procedure TKunde.setBynavn(Text : String); begin kBynavn := Text; end; procedure TKunde.setLand(Text : String); begin kLand := Text; end; procedure TKunde.setTlf1(Text : String); begin kTlf1 := Text; end; procedure TKunde.setTlf2(Text : String); begin kTlf2 := Text; end; procedure TKunde.setTlf3(Text : String); begin kTlf3 := Text; end; procedure TKunde.setFax1(Text : String); begin kFax1 := Text; end; procedure TKunde.setFax2(Text : String); begin kFax2 := Text; end; procedure TKunde.setFax3(Text : String); begin kFax3 := Text; end; procedure TKunde.setEmail1(Text : String); begin kEmail1 := Text; end; procedure TKunde.setEmail2(Text : String); begin kEmail2 := Text; end; procedure TKunde.setEmail3(Text : String); begin kEmail3 := Text; end; end. //end unit
17. februar 2003 - 20:55
#3
Husk at du skal lave en Create af din kunde, men det har du sikkert også gjort, og prøv evt at skrive SQLQUERY.SQL.TEXT := <Dit statement> så behøver du ikke clear og add ( 2 liner bliver til 1 :) ), men det burde ikke være noget problem at bruger clear og add, noget kunne tyde på at din SQLQuery comp. har en fejl, den Free'er sin SQL prop. når den har executet /Martin
19. februar 2003 - 06:45
#6
Jeg vil nødig gøre mig klog på noget der virker så komplext, men den almindeligste årsag til 'acces violation' - fejlmeddelelsen i databaseprogrammer af mere almindelig karakter er at - det feltnavn der i selve databasen er index skal udfyldes - hvis man springer dette over får man den type problem - på samme måde under indtasningen hvis man forsøger at give 'dem' samme navn.Det er sikkert noget mere indviklet i dit tilfælde, men check det for en sikkerheds skyld.