Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Functions mit Delphi (https://www.delphipraxis.net/49493-functions-mit-delphi.html)

cell 12. Jul 2005 06:51

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:

Matze 12. Jul 2005 06:57

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.

Duke_2004 12. Jul 2005 07:08

Re: Functions mit Delphi
 
Mal ganz schnell zusammengetibbelt...

Delphi-Quellcode:
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;
Aufruf wäre zb:

Delphi-Quellcode:
sql('Spalte1,Spalte2','Tabelle','Spalte1=xxx','Spalte2,Spalte1');
Wie gesagt, nur schnell zusammengetibbelt... So würde ich anfangen, aber ist auf alle Fälle erweiterbar!
(Wer Fehler findet, darf sie behalten ;-) )

cell 12. Jul 2005 07:51

Re: Functions mit Delphi
 
Delphi-Quellcode:
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer'+cbotestnummer.text+'Testnummer');
was ist denn bei dem falsch wenn er sagt nicht genügend parameter???

Duke_2004 12. Jul 2005 07:54

Re: Functions mit Delphi
 
Zitat:

Zitat von cell
Delphi-Quellcode:
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer'+cbotestnummer.text+'Testnummer');
was ist denn bei dem falsch wenn er sagt nicht genügend parameter???


So müsste es gehen:

Delphi-Quellcode:
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer='+cbotestnummer.text+'Testnummer','');
Einfach für die Sortierbedingung einen leeren String übergeben...

(Prozedur funktioniert nicht direkt für Joins!)

Sidorion 12. Jul 2005 09:49

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;

cell 12. Jul 2005 10:36

Re: Functions mit Delphi
 
ich will mit dem quelltext die daten von der datenbank in eine combobox eintragen
Delphi-Quellcode:
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;
is ist schon einmal gegangen aber warum jetzt nichtmehr ??seht ihr einen Fehler??

Duke_2004 12. Jul 2005 10:46

Re: Functions mit Delphi
 
Zitat:

Zitat von cell
ich will mit dem quelltext die daten von der datenbank in eine combobox eintragen
Delphi-Quellcode:
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;
is ist schon einmal gegangen aber warum jetzt nichtmehr ??seht ihr einen Fehler??

Versuch das mal so...

Delphi-Quellcode:
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;
Ansonsten fällt mir spontan kein Fehler auf...
Oder gibt der irgendnen Fehler aus, das wär nämlich wichtig zu wissen...

cell 12. Jul 2005 11:54

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

Jasocul 12. Jul 2005 12:19

Re: Functions mit Delphi
 
Delphi-Quellcode:
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;
Es ging Duke_2004 imo nur um die eingefügte Sicherheitsmaßnahme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Seite 1 von 3  1 23      

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