Avatar billede r9 Nybegynder
13. februar 2003 - 19:31 Der er 9 kommentarer og
1 løsning

TSQLConnection & TSQLQuery

Jeg bruger TSQLConnection & TSQLQuery fra dbExpress, og vil gerne udføre nogle sql-statments.


Hvordan får jeg udført denne simple kode?

sql := 'select * from kunde';
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(sql);


Og hvordan bruger man PrepareStatement?
Avatar billede stoney Nybegynder
13. februar 2003 - 19:42 #1
sqlquery.open

Hvis du vil inserte,delte,update er der sqlqyery.execsql

Stoney
Avatar billede stoney Nybegynder
13. februar 2003 - 19:42 #2
der = det

Stoney
Avatar billede r9 Nybegynder
13. februar 2003 - 19:49 #3
hmm.

Dette virker ikke:

SQLQuery.Open;
sql := 'select * from kunde';
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(sql);
SQLQuery.ExecSQL(true);

while not SQLQuery.Eof do
begin
  res := SQLQuery.FindField('ID');
  ShowMessage(res.AsString);
  SQLQuery.Next;
end;



Det bliver kastet en "missing query"....
Avatar billede stoney Nybegynder
13. februar 2003 - 20:15 #4
with sqlquery do begin

  with SQL do begin
    Clear;

Add('SELECT * from kunde');
   
  end;
  Open;
  end;

Stoney
Avatar billede r9 Nybegynder
13. februar 2003 - 21:03 #5
Hvorfor skal "Open" kaldes efter ExecSQL?
Avatar billede stoney Nybegynder
13. februar 2003 - 21:18 #6
Det har jeg heller ikke sagt.
ExecSQL bruges ved insert,delete,update.
Altså kommandoer der IKKE returnere et recordset.
Open bruges ved select.

Stoney
Avatar billede r9 Nybegynder
13. februar 2003 - 21:25 #7
Ok, nu er jeg med.

Kan der ikke lade sig gøre at lave en database klasse uden at man smider TSQLConnection og TSQLQuery på en form?



F.eks:

unit Database;

interface

uses
  DBXpress, SqlExpr;

type
TDatabase = class  //database klasse

private
  mySQLConnection: TSQLConnection;
  SQLQuery: TSQLQuery;

public
  function doSelect(SqlStr : String): String;
  constructor create();

end;



implementation


constructor TDatabase.create();
begin
mySQLConnection.Connected := true;
SQLQuery.SQLConnection := mySQLConnection;
end;



function TDatabase.doSelect(SqlStr : String): String;
begin
Result := '';
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(SqlStr);
SQLQuery.Open;
end;


end.




Når jeg kalder metoden, så får jeg en fejl:

EAccessViolation with message 'Access violation at adress.....
Avatar billede r9 Nybegynder
13. februar 2003 - 21:27 #8
Jeg ønsker en unit uden form, som håndterer database adgang.
Avatar billede stoney Nybegynder
13. februar 2003 - 22:53 #9
Du kan lave et datamodule

File->New->DataModule

Stoney
Avatar billede r9 Nybegynder
14. februar 2003 - 11:58 #10
takker
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

IT-JOB

KMD A/S

Projektleder

Politiets Efterretningstjeneste

PET søger softwareingeniører til Ruslandsområdet

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer