![]() |
Datenbank: SQL • Zugriff über: DataModul
Functions mit Delphi
Morgen
Die aufgabenstellung lautet wie folgt: ich habe in meinem Programm einige SQL statements drinnen, und um diese in dem Quelltext zu vermeiden, soll ich eine Funktion schreiben wo die SQL statements drinnen sind. Ein SQL schaut ungefähr so aus: 'SELECT Datum, Material_Scheibe, Testnummer FROM friktionstest WHERE Testnummer=' + cbotestnummer.text' ORDER BY Datum' so aber der SQL Befehl könnte aber auch nur so heißen 'SELECT Datum From friktionstest' ich verstehe nicht wie die eingabe von den SELECT statements erfolgt bzw wie ich die aussuche. oder wie ich die WHER und ORDER BY klausel weg lasse kann mir da jemand helfen bzw versteht das jemand :mrgreen: |
Re: Functions mit Delphi
Du könntest einen Parameter übergeben und je nach dem das SQL-Statement anders zusammensetzen. Im Endeffekt ist das auch nur ein String.
Als Parameter kannst du natürlich auch die "SQL-Statement-Abschnitte" übergeben, nur sollten bei dir diese Abfragen in der Funktion sein, wie du es sagst, dann wird dir nichts anderes überig bleiben, als den String in der Funktion unterschiedlich zusammenzusetzen. |
Re: Functions mit Delphi
Mal ganz schnell zusammengetibbelt...
Delphi-Quellcode:
Aufruf wäre zb:
procedure sql(Spalten, Tabelle, wherebedingung, sortierspalten: string);
begin if (sortierspalten= '') then //Keine Sortierspalten-> keine Sortierung begin if (wherebedingung = '') then //Kein Where -> keine Filterung sqltext := 'Select ' + spalten + ' from ' + tabelle else sqltext := 'Select ' + spalten + ' from ' + tabelle + ' where ' + wherebedingung; end else begin if (wherebedingung = '') then sqltext := 'Select ' + spalten + ' from ' + tabelle + ' order by ' + sortierspalten else sqltext := 'Select ' + spalten + ' from ' + tabelle + ' where ' + wherebedingung + ' order by ' + sortierspalten; end; //Sqltext an zb IBSQL übergeben und ausführen end;
Delphi-Quellcode:
Wie gesagt, nur schnell zusammengetibbelt... So würde ich anfangen, aber ist auf alle Fälle erweiterbar!
sql('Spalte1,Spalte2','Tabelle','Spalte1=xxx','Spalte2,Spalte1');
(Wer Fehler findet, darf sie behalten ;-) ) |
Re: Functions mit Delphi
Delphi-Quellcode:
was ist denn bei dem falsch wenn er sagt nicht genügend parameter???
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer'+cbotestnummer.text+'Testnummer');
|
Re: Functions mit Delphi
Zitat:
So müsste es gehen:
Delphi-Quellcode:
Einfach für die Sortierbedingung einen leeren String übergeben...
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer='+cbotestnummer.text+'Testnummer','');
(Prozedur funktioniert nicht direkt für Joins!) |
Re: Functions mit Delphi
Wenn Du mehr als eine Spalte zum selektieren zulassen willst, dann solltest Du ein Array of String übergeben lassen.
Beispiel
Delphi-Quellcode:
Function SqlQuery( _asFields: Array of String;
_asTables: Array of String; Var _oResult: TStringList; _asJoinOrFilterBed: Array of String=[]; _asSortFields: Array of String=[]): Boolean; Var sStatement: String; iLoop: Integer; Begin sStatement:='SELECT '; For iLoop:=0 To Pred(Length(_asFields)) Do Begin If iLoop>0 Then sStatement:=sStatement+', '; sStatement:=sStatement+_asFieds[iLoop]; End; sStatement:=sStatement+' FROM '; For iLoop:=0 To Pred(Length(_asTables) Do Begin If iLoop>0 Then sStatement:=sStatement+', '; sStatement:=sStatement+_asTables[iLoop]; End; sStatement:=sStatement+' WHERE '; For iLoop:=0 To Pred(Length(_asJoinOrFilterBed) Do Begin If iLoop>0 Then sStatement:=sStatement+' AND '; sStatement:=sStatement+_asJoinOrFilterBed[iLoop]; End; sStatement:=sStatement+' ORDER BY '; For iLoop:=0 To Pred(Length(_asSortFields) Do Begin If iLoop>0 Then sStatement:=sStatement+', '; sStatement:=sStatement+_asSortFields[iLoop]; End; End; |
Re: Functions mit Delphi
ich will mit dem quelltext die daten von der datenbank in eine combobox eintragen
Delphi-Quellcode:
is ist schon einmal gegangen aber warum jetzt nichtmehr ??seht ihr einen Fehler??
begin
frmmesswertauswahl.cbotestreihe.Items.Clear; with DataModule1 do begin Query.SQL.Text:= selectsql('Testreihe','Testreihe','Testnummer=' +frmmesswertauswahl.lblnummer.Caption,''); Query.Open; while not Query.Eof do begin frmmesswertauswahl.cbotestreihe.Items.Add(Query.Fields[0].AsString); Query.Next; end; Query.Close; end; end; end; |
Re: Functions mit Delphi
Zitat:
Delphi-Quellcode:
Ansonsten fällt mir spontan kein Fehler auf...
begin
frmmesswertauswahl.cbotestreihe.Items.Clear; with DataModule1 do begin if Query.Open then Query.close; Query.SQL.Clear; Query.SQL.Text := selectsql('Testreihe', 'Testreihe', 'Testnummer=' + frmmesswertauswahl.lblnummer.Caption, ''); //achte darauf, dass Caption auch einen Wert hat Query.Open; while not Query.Eof do begin frmmesswertauswahl.cbotestreihe.Items.Add(Query.Fields[0].AsString); Query.Next; end; Query.Close; end; end; Oder gibt der irgendnen Fehler aus, das wär nämlich wichtig zu wissen... |
Re: Functions mit Delphi
bei dem ersten quelltext sagt es mir keine fehlermeldung schreibt es auch nicht hinein, bei dem 2 schreibt es mir irgendwas von einer zugriffsverletzung (gleicher quelltext nur mit andren namen )
tja... =( |
Re: Functions mit Delphi
Delphi-Quellcode:
Es ging Duke_2004 imo nur um die eingefügte Sicherheitsmaßnahme.
begin
frmmesswertauswahl.cbotestreihe.Items.Clear; with DataModule1 do begin if Query.Active then Query.Close; // Reine Sicherheitsmaßnahme Query.SQL.Text:= selectsql('Testreihe','Testreihe','Testnummer=' +frmmesswertauswahl.lblnummer.Caption,''); Query.Open; while not Query.Eof do begin frmmesswertauswahl.cbotestreihe.Items.Add(Query.Fields[0].AsString); Query.Next; end; Query.Close; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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