Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suche geeignete Komponente ? (https://www.delphipraxis.net/69607-suche-geeignete-komponente.html)

marabu 20. Mai 2006 18:38

Re: Suche geeignete Komponente ?
 
Hallo Vader,

das gehört so:

SQL-Code:
SELECT b.*, be.name, w.bezeichnung
FROM bestellungen b, besteller be, waren w
WHERE be.id = b.besteller_id AND w.id = b.waren_id;
Grüße vom marabu

Vader 20. Mai 2006 19:35

Re: Suche geeignete Komponente ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallo marabu
er zeigt jetzt alles im dbgrid, aber wenn ich einen neuen datensatz anlegen will kommt die fehlermeldung
mfg vader

marabu 20. Mai 2006 20:13

Re: Suche geeignete Komponente ?
 
Hallo Vader,

passe die SQL-Statements in den UpdateObjects an (damit keine AutoIncrement-Spalten vorkommen), setze in den Queries CachedUpdates auf True und vervollkommne deine Aktionsschalter. Zum Beispiel das Speichern einer neuen Bestellung mit Button6:

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
begin
  with Query3 do
  begin
    Post;
    ApplyUpdates;
    DisableControls;
    Close;
    Open;
    EnableControls;
  end;
end;
Wie stellst du eigentlich sicher, dass du wirklich etwas lernst, wenn wir dir jeden noch so kleinen Fehler im Eiltempo korrigieren?

Besorgte Grüße vom marabu

Vader 20. Mai 2006 21:38

Re: Suche geeignete Komponente ?
 
da hast du schon recht mit dem lernen, ich habe es soweit mein wissen es zulässt die datenbank gemacht,
aber jetzt sehe ich vor lauter bäume den wald nicht mehr !!


du schreibst :
Zitat:

passe die SQL-Statements in den UpdateObjects an (damit keine AutoIncrement-Spalten vorkommen),
da weiß ich nicht mehr was genau gemeint ist ohne beispiel !
mfg vader

mkinzler 20. Mai 2006 22:08

Re: Suche geeignete Komponente ?
 
Ist auf einem Feld der Datenbank autoinc aktiviert, darf diese Feld nicht durch die SQL-Abfrage gesetzt werden!

Vader 21. Mai 2006 11:04

Re: Suche geeignete Komponente ?
 
danke !
mfg vader

Vader 21. Mai 2006 21:23

Re: Suche geeignete Komponente ?
 
hallo marabu,

hab das jetzt so realisiert wie du das gemeint hast im beitrag #13 glaube ich

Delphi-Quellcode:
// funktion zum erzeugen des lookupfeldes im dbgrid

function tform1.CreateLookupField: TField;
begin
  Result := TStringField.Create(Query1);
  with Result do
  begin
    Name := Query1.Name + FieldName;
    Size := 50;
    DisplayLabel := 'Firma';
    DisplayWidth := 12;
    FieldName := 'ANREDE2';
    Lookup := true;
    LookupDataSet := query2;
    KeyFields := 'ANR_ID';
    LookupKeyFields := 'ID';
    LookupResultField := 'Phrase';
    DataSet := Query1;
    Index := 2;
  end;
end;



// erzeugt das lookupfield im dbgrid

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  f: TField;
  begin

  with Query1 do
  begin
   Query1.Close;
    // SQL Statement festlegen
    Query1.SQL.Text := 'SELECT * FROM firma';
    // Spalten analysieren
    FieldDefs.Update;
    // persistente Felder erzeugen
    for i := 0 to FieldDefs.Count - 1 do
      with FieldDefs[I] do
        if DataType <> ftUnknown then
        begin
          f := CreateField(Self);
          // Schlüsselfelder verstecken
          f.Visible := Copy(f.FieldName, Length(f.FieldName) - 1, 2) <> 'ID';
        end;
  end;
  CreateLookupField;  
  Query1.Open;
end;

das funzt jetzt super, aber ein neues problem habe ich, wo ich nicht weiter komme,
und zwar meine suchfunktion geht jetzt nicht mehr bei dem feld "phrase" ,
weil ich ja die Firmennamen von einer anderen tabelle bekomme ( anreden ), aber ich
bräuchte dort auch eine suchfunktion ?

und die fehlermeldung kommt auch

Delphi-Quellcode:
keine übereinstimmung der typen im ausdruck
so schaute meine suchfunktion aus :

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
  suche: string;
begin
  with Query1 do
  begin
    Query1.Close;
    Query1.SQL.Text := 'SELECT * FROM firma WHERE (Firmenname like :suche) OR (Bezeichnung like :suche)OR (Name like :suche)';
    Query1.ParamByName('suche').asString := Edit1.Text + '%';
    Query1.Open;

  end;

  end;
mfg vader

aschne1 21. Mai 2006 21:58

Re: Suche geeignete Komponente ?
 
Hi

Du schreibst, dass der Firmenname aus einer anderen Tabelle stammt, in deinem Query kommt aber nur eine Tabelle vor. Ich denke, die zweite Tabelle mit dem Firmennamen müsste schon mit einem JOIN eingebunden werden. Ist 'Firmenname' etwa der Fremdschlüssel und vom Typ Integer? Oder verstehe ich Dein Anliegen nicht richtig?
Dein Fehler entsteht durch eine Differenz der Datenbank- und Parametertypen in Delphi.

Ausserdem: Ich möchte nicht meckern, doch der ursprüngliche Titel dieses Themas hat eigentlich nicht mehr viel mit dem Inhalt zu tun. Wäre es nicht sinnvoller den Titel zu ändern (etwas aussagekräftiger).


Ich bin durch den Eintrag von mkinzer auf den Thread gestossen.
Zitat:

Edit mit Autocompletion?
Wie implementierst Du so etwas? Ich mache das bisher 'von Hand' mit einem Edit und VirtualStringTree. Hast Du eine bessere Lösung?


Danke und nochmals sorry wegen der Kritik.

Vader 22. Mai 2006 08:30

Re: Suche geeignete Komponente ?
 
hallo aschne1

du schreibst :


Zitat:

Ich denke, die zweite Tabelle mit dem Firmennamen müsste schon mit einem JOIN eingebunden werden
wie geht das mit einen JOIN einbinden ?

kannst du das einmal posten wie das geht ?

mfg vader

marabu 22. Mai 2006 08:39

Re: Suche geeignete Komponente ?
 
Hallo Vader,

der benötigte JOIN steht bereits in Beitrag #36 (Prinzip) bzw. #41 (angepasst an dein Demo-Projekt). Offensichtlich hast du inzwischen einer weitere Tabelle FIRMA erzeugt, von der niemand hier Aufbau und Inhalt kennt. Das macht es schwierig gemeinsam an einer Lösung zu arbeiten.

Freundliche Grüße vom marabu

aschne1 22. Mai 2006 09:49

Re: Suche geeignete Komponente ?
 
Hi

SQL-Code:
 SELECT ... FROM Tabelle1 LEFTJOIN Tabelle2 ON Tabelle1.feldname = Tabelle2.feldname
Damit verknüpfst Du den Primärschlüssel mit dem Fremdschlüssel. Das könnte auch mit WHERE geschehen, doch ist die Anweisung JOIN flexibler.
Je nach Datenbank und SQL-Dialekt sind zugelassen: INNER JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN. Diese hier zu erläutern würde den Rahmen sprengen. Das gehört zu den SQL Grundlagen!

Gruss

Vader 22. Mai 2006 17:36

Re: Suche geeignete Komponente ?
 
hallo,

wo schreibe ich den code jetzt rein in query1 oder query2 oder in meine suchfunktion ?

Delphi-Quellcode:
SELECT ... FROM Tabelle1 LEFTJOIN Tabelle2 ON Tabelle1.feldname = Tabelle2.feldname
natürlich angepasst an meine tabellen

mfg vader

mkinzler 22. Mai 2006 17:54

Re: Suche geeignete Komponente ?
 
In Query3. Obwohl ich mir nicht sicher bin ob die BDE SQL99 kann. (expliziter JOIN)


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

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