Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi SQL query (https://www.delphipraxis.net/154826-sql-query.html)

joachimd 27. Sep 2010 13:11

AW: SQL query
 
Zitat:

Zitat von schlecki (Beitrag 1052324)
du kannst dir auch einfach eine leere datei erstellen, die du "Test.udl" nennst.
Dann einen Doppelklick darauf, und der Editor geht auf, in dem du ganz bequem alles einstellen kannst. Du kannst sogar diese UDL-Datei in dem Connectionstring angeben und so die Verbindung über die Datei nutzen (anstatt hard-coded)...

...und auf diese Weise herausfinden, dass der provider SQLOLEDB.1 heißt;)

value is NULL 27. Sep 2010 13:27

AW: SQL query
 
Also, ich bin nun zu foldendem Teilerfolg gekommen mit folgendem Code:

Delphi-Quellcode:
var
  Conn : TADOConnection;
  Query: TADOQuery;
  provider : string;

begin
try
  CoInitialize(nil);
  Conn := TADOConnection.Create(nil);
  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info = False;Initial Catalog=test;Data Source=localhost';
  Conn.Connected := true;

  Query := TADOQuery.Create(nil);
  Query.Connection := Conn;
  Writeln(Query.SQL.Add('select count(*) from tbuser'));
  Query.Active := true;

except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;

end.
Wenn ich diesen Query abschieße: Writeln(Query.SQL.Add('Select count(*) from tbuser')); bekomme ich 0 zurück ich habe jedoch 17 einträge? ist das eventuell der Fehlercode?
wenn ja wie bekomme ich den Output des Query's?

Vielen Dank im Voraus!

PS: für die MSDE wird SQLOLEDB.1 verwendet

LG

Hansa 27. Sep 2010 13:42

AW: SQL query
 
Du setzt ja das active := true; auch zu spät. 8-)

value is NULL 27. Sep 2010 13:47

AW: SQL query
 
und wo gehört das active hin?

p80286 27. Sep 2010 14:01

AW: SQL query
 
ich würde es ungefähr so machen

Delphi-Quellcode:
query.close;
query.sql.text:='select count(*) as Meinwert from mytable';
query.open;
while not query.eof do begin
  meinWert:=query.fieldbyname('Meinwert').asinteger;
  query.next;
end;
query.close;
Ist natürlich meistens Blödsin mehrere Werte (wenn vorhanden) in eine Variable auszulesen.
Ist aber als Grundstruktur ganz brauchbar.

Gruß
K-H

value is NULL 27. Sep 2010 14:18

AW: SQL query
 
das prinzip verstehe ich nicht

wieso sieht der query so aus:
Delphi-Quellcode:
query.sql.text:='select count(*) as Meinwert from mytable';
bzw. warum dieses zeile?
Delphi-Quellcode:
meinWert:=query.fieldbyname('Meinwert').asinteger;
ich will ja nur einen Wert oder ein count absetzen wie zB:
select count(*) from tbuser oder
select username from tbuser

LG

GHorn 27. Sep 2010 14:50

AW: SQL query
 
Wie Hansa schon schrieb:

Zitat:

Zitat von Hansa (Beitrag 1052338)
Du setzt ja das active := true; auch zu spät. 8-)

Du musst doch erst das Ergebnis einlesen bevor Du es mit WritLn() ausgeben kannst. Der active-Befehl schickt Dein
select-statement auf die Reise.

So sollte es gehen:


Delphi-Quellcode:
query.sql.text:='select count(*) as Meinwert from mytable';
query.Active := true;
WriteLn(query.FieldByName('Meinwert').AsString);

value is NULL 27. Sep 2010 14:58

AW: SQL query
 
hm alles klar :) so funktionierst

Delphi-Quellcode:
var
  Conn : TADOConnection;
  Query: TADOQuery;
  wert : string;

begin
try
  CoInitialize(nil);
  Conn := TADOConnection.Create(nil);
  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info = False;Initial Catalog=test;Data Source=localhost';
  Conn.Connected := true;

  Query := TADOQuery.Create(nil);
  Query.Connection := Conn;
  query.SQL.Text := 'select count(*) as wert from tbuser';
  query.Active := True;
  Writeln(query.FieldbyName('wert').asstring);

except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;

end.
aber das mit dem
Delphi-Quellcode:
query.SQL.Text := 'select count(*) as wert from tbcall';
ist für mich irgendwie unlogisch :)
dh. ich setze praktisch in meinem query die variable?

LG und DANKE

value is NULL 27. Sep 2010 15:27

AW: SQL query
 
Hab jetzt versucht mir das ganze zu vereinfachen und eine unit zu schreiben:

Delphi-Quellcode:
unit sqlst;

interface

uses
  SysUtils,db,adodb,activex;

function connect(): string;
function query(query : string) : string;
function close(): string;

var
  conn : TADOConnection;
  query1 :TADOQuery;

IMPLEMENTATION

function connect(): string;
begin
try
  CoInitialize(nil);
  Conn := TADOConnection.Create(nil);
  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info = False;Initial Catalog=test;Data Source=localhost';
  Conn.Connected := true;
except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;
end;

function query(query : string) : string;
begin
try
  query1 := TADOQuery.Create(nil);
  query1.Connection := Conn;
  query1.SQL.Text := query;
  query1.Active := True;
except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;
end;

function close(): string;
begin
try
  query1.SQL.Clear;
  query1.close;
except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;
end;


end.
ABBEERR ich habe ja nun das problem, das ich an dieser stelle:
Delphi-Quellcode:
function query(query : string) : string;
begin
try
  query1 := TADOQuery.Create(nil);
  query1.Connection := Conn;
  query1.SQL.Text := query;
  query1.Active := True;
except
  on e : exception do begin
    writeln(e.message);
    halt(1);
  end;
end;
end;
und zwar genau an dieser Stelle
Delphi-Quellcode:
 query1.SQL.Text := query;
ich muss hier ja auch diesen wert überegeben... wie könnte ich das lösen?

mir fehlt praktisch diese zeile:

Delphi-Quellcode:
 query.FieldbyName('wert').asstring
LG und DANKE

DataCool 27. Sep 2010 16:05

AW: SQL query
 
Hi,

Du solltest den Parameter der Funktion nicht genauso wie die Funktion selber nennen !

Delphi-Quellcode:
function query(sQuerySQL : string) : string;
Var oTmpQry : TAdoQuery;
begin
oTmpQry := TADOQuery.Create(nil);
try
  try
    oTmpQry.Connection := Conn;
    oTmpQry.SQL.Text := sQuerySQL;
    oTmpQry.Active := True;
    result := oTmpQry.FieldbyName('wert').asstring
  except
    on e : exception do begin
      writeln(e.message);
      halt(1);
    end;
  end;
Finally
  oTmpQry.free;
end;
end;
Greetz Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz