AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken mehrere sql datenbanken in einem programm
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere sql datenbanken in einem programm

Ein Thema von xan553 · begonnen am 29. Okt 2011 · letzter Beitrag vom 29. Okt 2011
Antwort Antwort
Seite 1 von 3  1 23      
xan553

Registriert seit: 29. Jan 2007
32 Beiträge
 
#1

mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 12:55
Datenbank: paradox 7 • Version: D7 • Zugriff über: BDE
Nochmal servus,

ich bin gerade an einem programm bzw bei einem fragment dieses programmes.
Die grobe funktion sieht folgendermaßen aus:

1 editfeld: edit1
1 combobox1 zum bestimmen der DB
1 combobox2 zum bestimmen der abzufragenden felder in der bei combobox1 gewählten db
1 button um die query abfrage zu starten
1 DB grid um die query auszugeben.


also im moment ist das so das ich für jede DB ein eigenes Query und iene eigene DS habe

wenn ich in combobox 1 etwas auswähle dann werden in combobox 2 auch nur die optionen angezeigt die auch in der jeweiligen DB vorhanden sind, das funktioniert auch prima aber die umsetzung ist meiner meinung nach sehr umständlich:

ich habe ein onchange ereignis auf combobox1 das die items von combobox 2 über eine procedure anpasst:
onchange:
Delphi-Quellcode:
procedure TTblLieferanten.ComboBox1Change(Sender: TObject);
begin
  suchort := strtoint(combobox1.Text);
  setsearchlabels(suchort);
end;
procedure

Delphi-Quellcode:
procedure TTblLieferanten.setSearchLabels(m: Byte);
begin
  case m of
    1: begin
         combobox2.Clear;
         Label10.visible := True;Label10.Caption := '1 = Name';
         Label11.visible := True;Label11.Caption := '2 = Kunden Nr.';
         Label13.visible := True;Label13.Caption := '';
         Label14.visible := True;Label14.Caption := '';
         combobox2.Items.Add('1');
         combobox2.Items.Add('2');
         combobox2.ItemIndex := 0;
       end;
    2: begin
         combobox2.Clear;
         Label10.visible := True;Label10.Caption := '1 = Name';
         Label11.visible := True;Label11.Caption := '3 = Artikel Nr.';
         Label13.visible := True;Label13.Caption := '6 = Bezeichnung';
         Label14.visible := True;Label14.Caption := '7 = Lieferanten';
         combobox2.Items.Add('1');
         combobox2.Items.Add('3');
         combobox2.Items.Add('6');
         combobox2.Items.Add('7');
         combobox2.ItemIndex := 0;
       end;
    3: begin
         combobox2.Clear;
         Label10.visible := True;Label10.Caption := '2 = Kunden Nr.';
         Label11.visible := True; Label11.Caption := '5 = Rechnungs Nr.';
         Label13.visible := True; Label13.Caption := '';
         Label14.Caption := '';
         combobox2.Items.Add('2');
         combobox2.Items.Add('5');
         combobox2.ItemIndex := 0;
       end;
    4: begin
         combobox2.Clear;
         Label10.visible := True;Label10.Caption := '2 = Kunden Nr.';
         Label11.visible := True;Label11.Caption := '4 = Auftrags Nr.';
         Label13.visible := True;Label13.Caption := '';
         Label14.Caption := '';
         combobox2.Items.Add('2');
         combobox2.Items.Add('4');
         combobox2.ItemIndex := 0;
       end;
    5: begin
         combobox2.Clear;
         Label10.visible := True;Label10.Caption := '1 = Name';
         Label11.Caption := '';
         Label13.Caption := '';
         Label14.Caption := '';
         combobox2.Items.Add('1');
         combobox2.ItemIndex := 0;
       end;
end;

Bei einem klick auf button1 wird dann der SQL string der jeweiligen in combobox1 ausgewählten query angepasst:

Delphi-Quellcode:
procedure TTblLieferanten.Button1Click(Sender: TObject);
var
m,n:byte;
begin
m := suchort;
n := strtoint(combobox2.Text);
  case m of
  1: begin
       case n of
       1:begin
        qrykunden.sql.Clear;
        qrykunden.sql.text := 'SELECT * FROM kunden WHERE Name LIKE "%'+edit1.text+'%"';
        end;
       2: begin
        qryartikel.SQL.Clear;
        qryartikel.sql.text := 'SELECT * FROM kunden WHERE KdNr LIKE "%'+edit1.text+'%"';
        end;
       end;
       qrykunden.active := True;
       DBGrid.Datasource := DSKunden;
       qryartikel.Active := false;
       qryrechnungen.Active := false;
       qryauftraege.Active := false;
       qrylieferanten.active := false;
       end;
  2: begin
       case n of
       1: begin
            qryartikel.sql.Clear;
            qryartikel.sql.text := 'SELECT * FROM artikel WHERE Name LIKE "%'+edit1.text+'%"';
          end;
       3: begin
            qryartikel.sql.Clear;
            qryartikel.sql.text := 'SELECT * FROM artikel WHERE ArtikelNr LIKE "%'+edit1.text+'%"';
          end;
       6: begin
            qryartikel.sql.Clear;
            qryartikel.sql.text := 'SELECT * FROM artikel WHERE Bezeichnung LIKE "%'+edit1.text+'%"';
          end;
       7: begin
            qryartikel.sql.Clear;
            qryartikel.sql.text := 'SELECT * FROM artikel WHERE Lieferant LIKE "%'+edit1.text+'%"';
          end;
       end;
       qrykunden.active := false;
       qryartikel.Active := true;
       DBGrid.Datasource := DSartikel;
       qryrechnungen.active := false;
       qryauftraege.active := false;
       qrylieferanten.active := false;
       end;
  3: begin
       case n of
       2: begin
            qryrechnungen.sql.Clear;
            qryrechnungen.sql.text := 'SELECT * FROM Rechnungen WHERE KdNr LIKE "%'+edit1.text+'%"';
          end;
       5: begin
            qryrechnungen.sql.Clear;
            qryrechnungen.sql.text := 'SELECT * FROM Rechnungen WHERE RechnungsNr LIKE "%'+edit1.text+'%"';
          end;
       end;
       qrykunden.active := false;
       qryartikel.active := false;
       qryrechnungen.active := true;
       DBGrid.Datasource := DSrechnungen;
       qryauftraege.active := false;
       qrylieferanten.active := false;
       end;
  4: begin
       case n of
       2: begin
            qryauftraege.sql.Clear;
            qryauftraege.sql.text := 'SELECT * FROM auftraege WHERE KdNr LIKE "%'+edit1.text+'%"';
          end;
       4: begin
            qryauftraege.sql.Clear;
            qryauftraege.sql.text := 'SELECT * FROM auftraege WHERE auftragsnr LIKE "%'+edit1.text+'%"';
          end;
       end;
       qrykunden.active := false;
       qryartikel.active := false;
       qryrechnungen.active := false;
       qryauftraege.active := true;
       DBGrid.Datasource := DSauftraege;
       qrylieferanten.active := false;
       end;
  5: begin
       case n of
       1: begin
            qrylieferanten.sql.Clear;
            qrylieferanten.sql.text := 'SELECT * FROM lieferanten WHERE Name LIKE "%'+edit1.text+'%"';
          end;
       end;
       qrykunden.active := false;
       qryartikel.active := false;
       qryrechnungen.active := false;
       qryauftraege.active := false;
       qrylieferanten.active := true;
       DBGrid.Datasource := DSKunden;
       end;
end;
end;
der rest vom code ist nur für die farbliche absetzung der DBgrid eintraege verantwortlich.

und nun meine frage ob ich mit diesem code nicht um 10.000 ecken denke und mir das lesen elbst schwer mache.

Mfg Xan553
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 12:59
-Du verwendest mehrere Tabellen und nicht mehrere DBs.
-Wenn du die Texteingeschaft von Query.SQL setzt benötigst du kein Clear.
-Warum verwendest du keine DbLookup-Komponenten?
-Warum noch Paradox ( ist total veraltet)?
Markus Kinzler
  Mit Zitat antworten Zitat
xan553

Registriert seit: 29. Jan 2007
32 Beiträge
 
#3

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:05
mit lookupkompunenten habe ich noch nie gearbeitet, werd mich aber in dem fall mal auf die suche machen.

paradox deswegen weil ich das ganze erstmal nur testen will für mich und clear weil ich mir nicht sicher bin ob wenn ich einen neuen string an sql übergebe der nicht einfach nur dazukopiert wird, so wie wenn ich bei den comboboxen einfach nur items.add eingebe

das mit den tabellen stimmt, mein fehler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:09
Zitat:
paradox deswegen weil ich das ganze erstmal nur testen will
Selbst dann würde ich einen riessen Bogen um Paradox machen
Zitat:
und clear weil ich mir nicht sicher bin ob wenn ich einen neuen string an sql übergebe der nicht einfach nur dazukopiert wird, so wie wenn ich bei den comboboxen einfach nur items.add eingebe
Bei Add wird hinzugefügt aber beim Setzen von .Text wird der Inhalt ersetzt.
Markus Kinzler
  Mit Zitat antworten Zitat
xan553

Registriert seit: 29. Jan 2007
32 Beiträge
 
#5

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:11
was würdest du mir als DBempfehlen? was ungefähr mit dem selben geringen aufwand wie paradox verbunden ist?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:13
Zitat:
paradox deswegen weil ich das ganze erstmal nur testen will
Selbst dann würde ich einen riessen Bogen um Paradox machen
Es gibt auch Leute die mögen es wenn man ihnen weh tut ...

Aber in 2011 ist es doch einfach z.B. ein MySQL-Server oder MS SQL-Express herunter zu laden und zu installieren um damit zu testen.
Eine "krankheit" wie Paradox + BDE braucht man sich wirklich nicht antun

MySQL und MS SQL-Express deshalb weil die GUI-Tools m.E. eine relativ einfachen Einstieg ermöglichen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
xan553

Registriert seit: 29. Jan 2007
32 Beiträge
 
#7

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:16
da ich nun nicht wirklich auf digitales SM stehe (um vorurteile gleich mal auszumärtzen auch nicht auf reales) werd ich mir in dem fall mal nen lokalen mysqlserver einrichten.

danke soweit, habt ihr vielleicht noch ein paar seiten auf denen die lookup komponenten gut erklärt werden?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:17
Ich musste deinen Beitrag gerade 2mal Lesen. Du rätst du MySQL?
Ich werfe noch FireBird + IBExpert (Personal) in den Raum.
Markus Kinzler
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
535 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:20
Hallo,

es ist doch wohl nur eine Datenbank, aber mehrere Tabellen, die abgefragt werden.

Man könnte den SQL-Code für die jeweiligen Abfragen einmalig setzen, wenn man mit Parametern arbeitet.

Beispiel:
Delphi-Quellcode:
  'SELECT * FROM artikel WHERE Name LIKE :p;
Query.ParamByName(
'p').asstring:='%'+edit1.text+'%';
Warum die Labels immer auf visible:=true setzten? Sehe keinen Grund dafür.

Auftragsnummer usw mit Like suchen? Dann lieber mit Locate in der offenen Tabelle.

Paradox mag ja für die ersten Übungen mit Datenbankprogrammierung noch ok sein; eine reale Anwendung sollte man damit heute nicht mehr machen. Versuche mal Firebird mit den IBX-Komponenten und als Hilsprogramm IBExpert oder SQLLite.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
xan553

Registriert seit: 29. Jan 2007
32 Beiträge
 
#10

AW: mehrere sql datenbanken in einem programm

  Alt 29. Okt 2011, 13:23
ich würde halt gerne etwas haben das einfach zu verstehen und dennoch effektiv ist

und das mit den parametern ist mir dann auch noch nicht bekannt, bin erst seit kurzer zeit dabei mich mit datenbaken zu beschäftigen.

hast du dazu irgendwelche lektüre?
  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 10:47 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