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