![]() |
SQL query
Hallo Delphianer
Bin gerade dabei mich mit SQL Query's zu beschäftigen, jedoch finde ich nur anleitungen für Form basierte Programme, Hat jemand einen heißen tipp für mich? danke schon mal LG |
AW: SQL query
Was willst Du wissen?
Wie man SQL-Querys im Allgemeinen schreibt? |
AW: SQL query
ja generell, habe gerade gesehen das es folgendes gibt:
Delphi-Quellcode:
SQL Technisch bin ich gut bewandert nur die connection zu einer lokalen MSDE ist bei mir ein großes Fragezeichen, bzw. den Output des Query's in eine variable schreibe
uses
SysUtiils, db, adodb; LG |
AW: SQL query
Zitat:
Such einmal nach Sql.Text, .Open, .Next etc. Da wird dann auch gründlich diskutiert warum man etwas so und nicht anders machen sollte. Gruß K-H P.S. Wo hakt es denn konkret? TADOConnection und TADOQuery auf das Form geklatscht, Die Connectionparameter zusammengeklickt, Connection und Query verbunden, fertig! |
AW: SQL query
Du brauchst nicht mal eine einzige Form ? :shock: Aber egal, ob mit oder ohne Form, das Stichwort lautet DataModule. Das braucht keine Form. Kurzanleitung (ohne Form) : auf das Datamotule kommen TDatabase, TTransaction, TDataSet. Im OI muss dann noch alles eingestellt werden. Database zuweisen usw. Du siehst : ohne Form ist (fast) wie mit der Form. :lol: Variable wäre dann ungefähr so zuzuweisen :
Delphi-Quellcode:
i := DataSet1.FieldByName ('INTVAR').AsInteger;
|
AW: SQL query
ne soll ja ne commandline app werden :)
so habe durch goolge wieder einiges erfahren mein code sieht aktuell so aus:
Delphi-Quellcode:
er sagt mir aber ständig:
var
Conn : TADOConnection; Query: TADOQuery; begin try CoInitialize(nil); Conn := TADOConnection.Create(nil); Conn.ConnectionString := 'Provider=MSSQL;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=EnvironmentSafe;Data Source=test'; Conn.Connected := true; Query := TADOQuery.Create(nil); Query.Connection := Conn; Query.SQL.Add('select count(*) from tbuser'); Query.Active := true; except on e : exception do begin writeln(e.message); halt(1); end; end; end. "Der Provider kann nicht gefunden werden." es ist eine MSDE2000 hat jemand eine idee wie ich den Provider für die MSDE angeben muss? LG |
AW: SQL query
Zitat:
Provider=MSSQL / MSDE / SQL probiert aber kein erfolg, gibt es ne andere Möglichkeit? oder hat wer eine Idee zum Provider? |
AW: SQL query
Mach Dir doch schnell ein Testprojekt, packe dort eine TADOConnection aufs Form und lass Dir den ConnectionString generieren. Evtl. funktioniert der "Microsoft OLE DB Driver for SQL Server", zumindest bei SQLExpress 2008 bekomme ich damit eine Verbindung.
|
AW: SQL query
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)... |
AW: SQL query
Hi Schlecki habs jetzt im endeffekt eh so zum testen:
Delphi-Quellcode:
ich versuche es jetzt mal wie DeddyH gemeint hat...
begin
opt.addoption('provider','p','provider',false,true,'','Set provider path'); try opt.parse; if paramcount = 0 then raise exception.Create('Parameter missing!'); except on e : exception do begin writeln(e.message); writeln(opt.usage); halt(1); end; end; provider := opt.getoptasstr('provider'); try CoInitialize(nil); Conn := TADOConnection.Create(nil); Conn.ConnectionString := 'Provider='+provider+';Password=;Persist Security Info=True;User ID=sa;Initial Catalog=EnvironmentSafe;Data Source=voxctv3'; Conn.Connected := true; // Query := TADOQuery.Create(nil); // Query.Connection := Conn; // Query.SQL.Add('select count(*) from tbcall'); // Query.Active := true; except on e : exception do begin writeln(e.message); halt(1); end; end; end. |
AW: SQL query
Zitat:
|
AW: SQL query
Also, ich bin nun zu foldendem Teilerfolg gekommen mit folgendem Code:
Delphi-Quellcode:
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?
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 ja wie bekomme ich den Output des Query's? Vielen Dank im Voraus! PS: für die MSDE wird SQLOLEDB.1 verwendet LG |
AW: SQL query
Du setzt ja das active := true; auch zu spät. 8-)
|
AW: SQL query
und wo gehört das active hin?
|
AW: SQL query
ich würde es ungefähr so machen
Delphi-Quellcode:
Ist natürlich meistens Blödsin mehrere Werte (wenn vorhanden) in eine Variable auszulesen.
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 aber als Grundstruktur ganz brauchbar. Gruß K-H |
AW: SQL query
das prinzip verstehe ich nicht
wieso sieht der query so aus:
Delphi-Quellcode:
bzw. warum dieses zeile?
query.sql.text:='select count(*) as Meinwert from mytable';
Delphi-Quellcode:
ich will ja nur einen Wert oder ein count absetzen wie zB:
meinWert:=query.fieldbyname('Meinwert').asinteger;
select count(*) from tbuser oder select username from tbuser LG |
AW: SQL query
Wie Hansa schon schrieb:
Zitat:
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); |
AW: SQL query
hm alles klar :) so funktionierst
Delphi-Quellcode:
aber das mit dem
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.
Delphi-Quellcode:
ist für mich irgendwie unlogisch :)
query.SQL.Text := 'select count(*) as wert from tbcall';
dh. ich setze praktisch in meinem query die variable? LG und DANKE |
AW: SQL query
Hab jetzt versucht mir das ganze zu vereinfachen und eine unit zu schreiben:
Delphi-Quellcode:
ABBEERR ich habe ja nun das problem, das ich an dieser stelle:
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.
Delphi-Quellcode:
und zwar genau an dieser Stelle
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;
Delphi-Quellcode:
ich muss hier ja auch diesen wert überegeben... wie könnte ich das lösen?
query1.SQL.Text := query;
mir fehlt praktisch diese zeile:
Delphi-Quellcode:
LG und DANKE
query.FieldbyName('wert').asstring
|
AW: SQL query
Hi,
Du solltest den Parameter der Funktion nicht genauso wie die Funktion selber nennen !
Delphi-Quellcode:
Greetz Data
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; |
AW: SQL query
Zitat:
Code:
in diesem speziellen falle wird wohl nur ein wert zurück geliefert werden, und zwar die Anzahl der Zeilen/Datensätze in "Meinwert".
query.sql.text:='select count(*) as Meinwert from mytable';
Mit
Code:
wird aus einer Antwortzeile das Feld "Meinwert" ausgelesen und in meinwert gespeichert.
meinWert:=query.fieldbyname('Meinwert').asinteger;
vielleicht wird es so etwas klarer:
Delphi-Quellcode:
Dann erhällst Du als Ergebnis eine Stringliste, in der alle Namen enthalten sind.
var
NamensListe : tstringlist; ... Namensliste:=tstringlist.create; ... query.close; query.sql.text:='select Name as Famname from mytable'; // Definition der Query query.open; // Ausführen der Query while not query.eof do begin // Solange es Daten gibt Namensliste.add(query.fieldbyname('Famname').asinteger); // in Liste speichern query.next; // nächster Datensatz end; query.close; // schließen! Gruß K-H |
AW: SQL query
In #19 schreibst Du 3 Funktionen, die jeweils als Rückgabewert
einen String haben sollen. Allerdings passiert da nichts. Nirgendwo ein
Delphi-Quellcode:
Dann kannst Du auch gleich eine procedure draus machen. Oder
Result := 'Blabla'
Du gibst etwas sinnvolles zurück, was in der aufrufenden Routine auch verwertet wird. Wie universell sollen denn Deine Funktionen sein. Dienen sie nur dazu, das count(*) zurückzugeben oder soll das eine Art Blackbox werden? Wenn letzteres, musst Du das Ganze noch etwas aufbohren. Ich denke, Beispiele findest Du hier in der DP bis zum Abwinken. |
AW: SQL query
Hi Data
habe die function soeben probiert, bekomme aber ständig: "Field 'wert' not found" zurück was will er da von mir? LG und DANKE! PS: P80286 Danke für die Erklärung, es ist nun wesentlich deutlicher ! |
AW: SQL query
Hast Du in der Abfrage auch einen Alias namens "wert" vergeben?
|
AW: SQL query
Zitat:
das Feld 'Wert' in der von mir geschriebenen Function war nur als Platzhalter gedacht ! Wenn Du z. B. einen SQL hast: "Select Count(*) as Anz from tablenname" dann müßte in meiner function 'Wert' mit 'Anz' ersetzt werden, also der Name des gesuchten Feldes den Du auslesen möchtest. Greetz Data |
AW: SQL query
hm, und was sagt mir das jetzt? :(
steh gerade an LG |
AW: SQL query
Ohne Alias:
Delphi-Quellcode:
Mit Alias:
Query.SQL.Text := 'SELECT COUNT(*) FROM Tabelle';
Query.Open; IntVar := Query.Fields[0].AsInteger;
Delphi-Quellcode:
Im letzteren Fall kannst Du über FieldByName über das benannte Feld zugreifen.
Query.SQL.Text := 'SELECT COUNT(*) AS Anzahl FROM Tabelle';
Query.Open; IntVar := Query.FieldByName('Anzahl').AsInteger; |
AW: SQL query
cool :)
so hats geklappt :)
Delphi-Quellcode:
ich danke euch VIELMAS!!!!function query(sQuerySQL : string) : string; begin oTmpQry := TADOQuery.Create(nil); try try oTmpQry.Connection := Conn; oTmpQry.SQL.Text := sQuerySQL; oTmpQry.Active := True; result := oTmpQry.Fields[0].asString; except on e : exception do begin writeln(e.message); halt(1); end; end; Finally oTmpQry.free; end; end; LG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr. |
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 by Thomas Breitkreuz