Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery variabel (https://www.delphipraxis.net/146202-tquery-variabel.html)

fl63 19. Jan 2010 10:57

Re: TQuery variabel
 
Zitat:

Zitat von Jens Hartmann
Zitat:

Zitat von fl63
Tabellenname allein macht die Sache doch nicht variabel. Ich stelle mir die Sache mit einer FilelistBox oder einem OpenDialog vor. Ich habs auch damit ausprobiert nur zeigen die Ergebnisse keine Wirkung.

Was hast Du denn bislang im Bezug auf die FileListBox oder das OpenDialog ausprobiert.

Gruß Jens



Ursprünglich hatte ich es mir so gedacht:

Eine Datasource, eine Table1, eine DBCombobox auf das Formular gelegt.
DataSource mit Table1 verknüpft,
ComboBox mit Datasource verknüpft,
Table1 mit Database = C\DB verknüpft und kompiliert.

Ergebnis keine TabellenNamen in DBCombobox
Die Verknüpfung Combobox.Text mit SQL.Add ... from ...
habe ich mir gleich gespart.

Daraufhin OpenDialog1 ausprobiert
Delphi-Quellcode:
If OpenDialog.Filename = '' then Tabellenname := gesamt3
Tabellenname:= OpenDialog.Filename
...
Ergebnis genauso niederschmetternd da FileName den ganzen Pfad mitliefert.

fl63 19. Jan 2010 13:58

Re: TQuery variabel
 
Schade das mir hier bis jetzt keiner weiterhelfen kann.

hoika 19. Jan 2010 14:03

Re: TQuery variabel
 
Hallo,

Zitat:

Ergebnis genauso niederschmetternd da FileName den ganzen Pfad mitliefert.
Und ?

ExtractFileName -> Tabellen-Name
ExtractFilePath -> "DataBase"-Name


Heiko

Jens Hartmann 19. Jan 2010 16:48

Re: TQuery variabel
 
Jetzt muss ich aber nochmal nachfragen.

Du möchtest über die ListBox oder das OpenDialog die entsprechende Tabelle aussuchen. Oder habe ich da jetzt was falsch verstanden.

Weil das kann ja eigendlich gar nicht gehen. Die Tabelle selber befindet sich ja in einer Datenbank. Wenn Du es so machen wolltest, ginge das ja nur, wenn jede Datenbank nur eine Tabelle enthalten würde, und diese auch noch den Namen der Tabelle hat.

Wäre aber irgendwie unlogisch, weil dann müsstets Du ja auch mit dem kompletten FileName zurechtkommen. Dann darfst Du den nur nicht für den Tabellennamen verwenden, sondern für die Verbindung zur Datenbank, also in der Connection einbauen.

Also schlagt mich, aber so versteh ich deine Gedanken. :roll:

Gruß Jens

hoika 19. Jan 2010 17:49

Re: TQuery variabel
 
Hallo,

*schlag* *stech* *würg*

Du hast es so gewollt ;)

Wir reden von Paradox.

Eine "Datenbank" ist dort ein Verzeicbnis.
Eine "Tabelle" halt eine DB-Datei in diesem Verzeichnis
(incl. der Zusatzdazteien, Indizes usw.).


Heiko

khh 19. Jan 2010 18:44

Re: TQuery variabel
 
Zitat:

Zitat von hoika
Hallo,

*schlag* *stech* *würg*

Du hast es so gewollt ;)

Wir reden von Paradox.

das muss aber nicht sein, oder ?

Gruss Kh

Jens Hartmann 19. Jan 2010 18:54

Re: TQuery variabel
 
Zitat:

Zitat von hoika
*schlag* *stech* *würg*

:wall:
Aua, tut schon weh, aber mehr meine eigene Do..heit.
Zitat:

Zitat von hoika
Eine "Datenbank" ist dort ein Verzeicbnis.
Eine "Tabelle" halt eine DB-Datei in diesem Verzeichnis
(incl. der Zusatzdazteien, Indizes usw.).

Sorry, ist dann schon klar. Aber dann müsste es mit dem FileName ja eigendlich funktionieren...

Code:
ExtractFileName := Tabellen-Name
ExtractFilePath := "DataBase"-Name
Habe das gerade mal ausprobiert. So müsste es funktionieren
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Tabellenname : String;
  Datenbankverzeichnis : String;
begin
  if OpenDialog1.Execute then
    begin
      if OpenDialog1.Filename = '' then
        Tabellenname := 'gesamt3'
      else
        begin
          Datenbankverzeichnis := ExtractFilePath(OpenDialog1.FileName);
          Tabellenname := ExtractFileName(OpenDialog1.FileName);
        end;
    end;
    ShowMessage(Tabellenname);
    ShowMessage(Datenbankverzeichnis);
end;
Gruß Jens

fl63 20. Jan 2010 16:32

Re: TQuery variabel
 
Zitat:

Zitat von hoika
Hallo,

*schlag* *stech* *würg*

Du hast es so gewollt ;)

Wir reden von Paradox.

Eine "Datenbank" ist dort ein Verzeicbnis.
Eine "Tabelle" halt eine DB-Datei in diesem Verzeichnis
(incl. der Zusatzdazteien, Indizes usw.).


Heiko


Völlig richtig. Wir sind bei Paradox. Warum nicht?


Zitat:

Zitat von Jens Hartmann
Jetzt muss ich aber nochmal nachfragen.

Du möchtest über die ListBox oder das OpenDialog die entsprechende Tabelle aussuchen. Oder habe ich da jetzt was falsch verstanden.


Gruß Jens


Ursprünglich wollte ich über DBListbox die einzelnen Tabellen auswählen. Dafür bin ich vermutlich zu do... , da der oben beschriebene Weg nicht funktioniert.
Also mußte ich mir einen anderen Weg (mit OpenDialog) überlegen.

Jens Hartmann 20. Jan 2010 17:26

Re: TQuery variabel
 
Warum funktioniert das oben nicht. Ich habe es probiert. Und Du bekommst genau die Daten die du willst. Für deinen Fall benötigst Du...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Tabellenname : String;
begin
  if OpenDialog1.Execute then
    begin
      if OpenDialog1.Filename = '' then
        Tabellenname := 'gesamt3'
      else
        Tabellenname := ExtractFileName(OpenDialog1.FileName);
      end;
    end;
    ShowMessage(Tabellenname);
end;
und in deinem SQL.Text müsste das dann so aussehen...
Delphi-Quellcode:
    SQL.Text :='Select * from '+Tabellenname+' where Upper (feld001) Like Upper (:feld1.text)';
also...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Tabellenname : String;
begin
  if OpenDialog1.Execute then
    begin
      if OpenDialog1.Filename = '' then
        Tabellenname := 'gesamt3'
      else
        Tabellenname := ExtractFileName(OpenDialog1.FileName);
      end;
    end;
    SQL.Text :='Select * from '+Tabellenname+' where Upper (feld001) Like Upper (:feld1.text)';
end;
Gruß Jens

fl63 21. Jan 2010 10:11

Re: TQuery variabel
 
Zitat:

Zitat von Jens Hartmann
Warum funktioniert das oben nicht.


Das hat doch niemand behauptet,daß es mit OpenDialog nicht geht.

Meine präferierte Möglichkeit mit der DBListbox funktioniert nicht.

Dennoch vielen Dank für die Lösung meiner zweiten Möglichkeit (OpenDialog).

Gruß Frank

hoika 21. Jan 2010 10:28

Re: TQuery variabel
 
Hallo,

es gibt noch einen anderen Weg.

TDataBase.GetTablesNames

Die Tabellen würde ich dann in einer normale ListBox/ListView packen.


Heiko

fl63 23. Jan 2010 11:10

Re: TQuery variabel
 
Zitat:

Zitat von hoika
Hallo,

es gibt noch einen anderen Weg.

TDataBase.GetTablesNames

Die Tabellen würde ich dann in einer normale ListBox/ListView packen.


Heiko


Das war DER TIP !!

Anbei die Lösung:

Delphi-Quellcode:
procedure TForm1.AbfrageClick(Sender: TObject);
Var SQLString1,SQLString2: String;
begin
If Edit1.Text = '' then Edit1.Text := '..';
If Edit2.Text = '' then Edit2.Text := '..';
SQLString1:= StringReplace(Edit1.Text,'#','_',[rfReplaceAll]);
SQLString1:= StringReplace(SQLString1,'..','%',[rfReplaceAll]);
SQLString2:= StringReplace(Edit2.Text,'#','_',[rfReplaceAll]);
SQLString2:= StringReplace(SQLString2,'..','%',[rfReplaceAll]);
  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from '+ ComboBox1.Text +' where Upper (feld001) Like Upper (:feld1.text) ');
    SQL.Add('And Upper (feld002) Like Upper (:feld2.text) ');
    ParamByName('feld1.text').asString := SQLString1;
    ParamByName('feld2.text').asString := SQLString2;
    Active:=True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Database1.GetTableNames(ComboBox1.Items,false);
end;
Vielen Dank an alle die mitgeholfen haben.

fl63 3. Mär 2010 14:20

Re: TQuery variabel
 
Hallo DPler

erneut eine Frage zum Thema TQuery variabel.

Delphi-Quellcode:
    SQL.Add('Select * from '+ ComboBox1.Text +' where Upper (feld001) Like Upper (:feld1.text) ');
    SQL.Add('And Upper (feld002) Like Upper (:feld2.text) ');
Das ist das bisherige Ergebnis. Jetzt ist die Frage wie bekomme ich (Feld001) variabel.
Andere Tabellen haben den FeldNamen zB. Name oder Adresse.
Solche Tabellen bekomme ich nicht mit obengenannter Abfrage abgefragt. Also muß ich den Feldnamen aus der jeweiligen Tabelle auslesen und als Variable statt (Feld001) angeben. Wie mache ich das.

DeddyH 3. Mär 2010 14:23

Re: TQuery variabel
 
Tabellen ermitteln -> GetTableNames
Felder ermitteln -> GetFieldNames

Kann man drauf kommen, oder? ;)

fl63 13. Mär 2010 13:39

Re: TQuery variabel
 
Delphi-Quellcode:
SQL.Add('Select * from '+ ComboBox1.Text +' where Upper (feld0....
dieses bezeichnet die abzufragende Tabelle.

Delphi-Quellcode:
Statusbar1.Panels[0].Text := IntToStr(ComboBox1.Text.RecordCount);
ComboBox1.Text.RecordCount ist natürlich Unfug. Aber es verdeutlicht das Problem.
Ich habe es versucht mit Table1.Tablename := ComboBox1.text und Table1.Recordcount. Das ist alles fehlgeschlagen. Wie kann ich mir noch helfen?

hoika 13. Mär 2010 20:10

Re: TQuery variabel
 
Hallo,

also ich habe die Frage nicht begriffen ...
Am besten stellst du sie in einem eigenen Thread mal allgemeiner.


Heiko

fl63 14. Mär 2010 09:15

Re: TQuery variabel
 
Im Quelltext (Beitrag 52 siehe oben) steht:
Delphi-Quellcode:
SQL.Add('Select * from '+ ComboBox1.Text +' where Upper (feld001) Like Upper (:feld1.text) ');
    SQL.Add('And Upper (feld002) Like Upper (:feld2.text) ');
wobei Combobox1.Text den Tabellennamen der abzufragenden Tabelle anzeigt.

Wie kann ich RecordCount-1 also den Die Gesamtzahl der Datensätze der Tabelle in einem eigenen StatusPanel anzeigen also ungefähr:
Delphi-Quellcode:
Statusbar1.Panels[0].Text := IntToStr(ComboBox1.Text.RecordCount-1);
oder gibt es für diesen Zweck einen eigenen SQL Befehl?

Frank

fl63 14. Mär 2010 13:26

Re: TQuery variabel
 
Jetzt hab ich eine Lösung mit Count aus SQL Sprache

Delphi-Quellcode:
If Combobox1.Text = '' then Combobox1.Text := 'gesamt3';
  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from '+ ComboBox1.Text +' where Upper (feld001) Like Upper (:feld1.text) ');
    SQL.Add('And Upper (feld002) Like Upper (:feld2.text) ');
    ParamByName('feld1.text').asString := SQLString1;
    ParamByName('feld2.text').asString := SQLString2;
    Active:=True;
  end;
StatusBar1.Panels[0].Text:=
IntToStr(Query1.SQL.Add('Select CountAll(feld001)from' + ComboBox1.text+' '));

end;
Das StatusbarPanel zeigt " 2 " statt 100000 Datensätze an. Woran liegt das?

DeddyH 14. Mär 2010 13:54

Re: TQuery variabel
 
Zitat:

Delphi-Quellcode:
StatusBar1.Panels[0].Text:=
IntToStr(Query1.SQL.Add('Select CountAll(feld001)from' + ComboBox1.text+' '));

:pale:
Was erwartest Du denn hier? Die Query ist aktiv, Du müsstest also entweder
- die Query schließen, SQL ändern, öffnen und Ergebnis auslesen oder
- eine 2. Query erzeugen, dieser die COUNT-Abfrage eintragen, öffnen und Ergebnis auslesen

Ich würde die 2. Methode bevorzugen. Btw: was ist CountAll, hab ich noch nie gehört?

fl63 14. Mär 2010 14:08

Re: TQuery variabel
 
Also ich werde die 2te Query erzeugen und entsprechend abfragen.
'CountAll = Count *' ?? irgendwo habe ich das im Netz gelesen.

Vielen Dank für die Antwort.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Seite 2 von 2     12   

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