AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Functions mit Delphi

Ein Thema von cell · begonnen am 12. Jul 2005 · letzter Beitrag vom 13. Jul 2005
Antwort Antwort
Seite 1 von 3  1 23      
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#1

Functions mit Delphi

  Alt 12. Jul 2005, 07:51
Datenbank: SQL • Zugriff über: DataModul
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Functions mit Delphi

  Alt 12. Jul 2005, 07:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#3

Re: Functions mit Delphi

  Alt 12. Jul 2005, 08:08
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:

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 )
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#4

Re: Functions mit Delphi

  Alt 12. Jul 2005, 08:51
Query.SQL.Text:= selectsql('Material_Belag','friktionstest','Testnummer'+cbotestnummer.text+'Testnummer'); was ist denn bei dem falsch wenn er sagt nicht genügend parameter???
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#5

Re: Functions mit Delphi

  Alt 12. Jul 2005, 08:54
Zitat von cell:
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:

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!)
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#6

Re: Functions mit Delphi

  Alt 12. Jul 2005, 10:49
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;
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#7

Re: Functions mit Delphi

  Alt 12. Jul 2005, 11:36
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??
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#8

Re: Functions mit Delphi

  Alt 12. Jul 2005, 11:46
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...
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#9

Re: Functions mit Delphi

  Alt 12. Jul 2005, 12:54
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... =(
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Functions mit Delphi

  Alt 12. Jul 2005, 13:19
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.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr.
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