Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Kunden auf Rechnungsform eingeben/anzeigen (https://www.delphipraxis.net/72468-kunden-auf-rechnungsform-eingeben-anzeigen.html)

LOMBI 30. Jun 2006 17:10

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery, TDataSource

Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo,

ich möchte auf der Rechnungsform den KundenNamen in ein TEdit eintragen und
wenn nötig suchen lassen.

Gebe ich z.B. "Mü" für "Müller" ein, dann sollte sich beim OnExit des TEdits die Kundenübersicht öffnen, mit den Namen aus der KundenTabelle, sortiert nach "Mü.."

Bei dem folgenden Code bekomme ich allerdings die Meldung "Parameter 'suche' nicht gefunden":

Delphi-Quellcode:
procedure TFRechnungen.EditMatchExit(Sender: TObject);
begin
  with FKunden.QueryKunden do
    begin
      SQL.Text := 'SELECT * FROM Kunden WHERE (NName like : suche) OR
                   (VName) like : suche)';
      ParamByName('suche').asString : = EditMatch.Text +'%';
      Open;
Wer weiß Bescheid? Vielen Dank für Eure Hilfe!

Gruß
Lombi

mkinzler 30. Jun 2006 17:14

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Versuchs mal so:

Delphi-Quellcode:
SQL.Text := 'SELECT * FROM Kunden WHERE (NName like :suche) OR
                   (VName like :suche)';

LOMBI 3. Jul 2006 15:06

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Danke mkinzler für den Hinweis. Hat geklappt!

Folgende Fragen gäb's noch:

Wie bitte könnte ich nur für diesen Vorgang das Fenster
der Kundenübersicht verkleinern?

Aus der Kundenübersicht möchte ich einen Kunden per Klick auswählen und
seine Daten auf der Rechnungsform in die Felder EditNName, EditVName EditStrasse usw. eingetragen lassen.

Gruß
Lombi

marabu 5. Jul 2006 10:33

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo Lombi,

meinst du mit Verkleinern das Minimieren des Fensters Kundenübersicht? Ich würde das Fenster modal anzeigen, dann hast du dieses Problem gar nicht. Nach dem Auswählen des Datensatzes wird das Fenster automatisch geschlossen, wenn du es willst.

Grüße vom marabu

LOMBI 5. Jul 2006 17:39

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo marabu,

ich meine nicht das Minimieren der Kundenübersicht. Normalerweise werden
die Forms in voller Bildschirmgröße dargestellt. Beim OnExit des EditMatch wird die KundenListe (FKundenListe.Show) mit den Treffern gezeigt. Bei dieser Übersicht wollte ich eben nicht den ganzen
Bildschirm ausfüllen. Mit Height/Width-Einstellung der Form scheint's
zu funktionieren.

Zitat:

Aus der Kundenübersicht möchte ich einen Kunden per Klick auswählen und
seine Daten auf der Rechnungsform in die Felder EditNName, EditVName EditStrasse usw. eingetragen lassen.
Zitat:

Nach dem Auswählen des Datensatzes wird das Fenster automatisch geschlossen, wenn du es willst.
Genau, ich möchte aus der Trefferliste (FKundenübersicht) eine Adresse per Klick auswählen, die Übersicht schließen und die Daten in die Edits auf der Rechnungsform übernehmen. OnCellClick des DBGrid hat nicht den gewünschten Erfolg gebracht.

Was ist bitte zu tun?

Gruß
Lombi

marabu 5. Jul 2006 20:37

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo Lombi,

die Übernahme der Kundendaten könntest du im Ereignis OnDblClick() des DBGrid vornehmen. Nach erfolgreicher Übernahme kannst du dann ModalResult auf mrOK setzen und dein modaler Auswahldialog wird geschlossen. Die Dimensionierung der Form über die Eigenschaften Height und Width machst du schon richtig.

marabu

LOMBI 6. Jul 2006 09:02

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Schönen guten Morgen marabu!

Zitat:

ParamByName('suche').asString : = EditMatch.Text +'%';
Was müßte ich bitte noch ergänzen, damit in die Suche auch Kleinbuch-
staben einbezogen werden, z.b. statt nach "Meier" möchte ich nach
"meier" suchen und trotzdem alle "Meier, MEIER" als Treffer erhalten.

Bis dann und viele Grüße
Lombi

marabu 6. Jul 2006 09:08

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Guten Morgen Lombi,

du kannst die Zeichenketten mit der LOCALSQL-Funktion UPPER() normieren:

SQL-Code:
SELECT * FROM Kunden WHERE UPPER(NName) LIKE :suche OR UPPER(VName) LIKE :suche
Grüße vom marabu

LOMBI 6. Jul 2006 11:15

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo marabu,

Zitat:

SELECT * FROM Kunden WHERE UPPER(NName) LIKE :suche OR UPPER(VName) LIKE :suche
mit diesem Code erhalte ich leider überhaupt keine Treffer im DBGrid.

Beste Grüße
Lombi

mkinzler 6. Jul 2006 11:30

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Ist der Suchstring auch Uppercase?

LOMBI 6. Jul 2006 11:39

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Entschuldigung für meinen Schnellschuß von soeben. Da ich in erster Linie
nach "meier" (klein) suche, muß der Code selbstverständlich so lauten:

Delphi-Quellcode:
SELECT * FROM Kunden WHERE LOWER(NName) LIKE :suche OR LOWER(VName) LIKE :suche OR UPPER(NName) LIKE :suche OR UPPER(VName) LIKE :suche;
Danke nochmals!

Lombi

mkinzler 6. Jul 2006 11:47

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Am besten wandelst du alles in Groß oder Kleinbuchstaben um:
SQL-Code:
SELECT * FROM Kunden WHERE LOWER(NName) LIKE LOWER(:suche) OR LOWER(VName) LIKE LOWER(:suche);

LOMBI 6. Jul 2006 13:47

Brauche ich UPPER bei Groß- oder Kleinbuchstaben gar nicht mehr zu deklarieren?

Muß ich eigentlich nach meinem SQL.Text noch ParamCheck := True angeben oder kann das wegfallen?

Zitat:

die Übernahme der Kundendaten könntest du im Ereignis OnDblClick() des DBGrid vornehmen. Nach erfolgreicher Übernahme kannst du dann ModalResult auf mrOK setzen und dein modaler Auswahldialog wird geschlossen.
Delphi-Quellcode:
procedure TFKundenListe.DBGridKundenDblClick(Sender: TObject);
begin
  if ModalResult = mrOK then
  FRechnungen.EditMatch.Text := FKunden.EditMatch.Text;
  Close;
end;
Leider immer noch keine Datenübernahme in EditMatch auf Form Rechnung.

Gruß
Lombi

mkinzler 6. Jul 2006 14:04

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Zitat:

Brauche ich UPPER bei Groß- oder Kleinbuchstaben gar nicht mehr zu deklarieren?
Nein weil ja beide seiten des Vergleichs gleichartig gewandelt werden.

z.B.
Wert in DB Suchstring
Maier maier
MAIER mAiEr
wird zu

maier maier
maier maier

Zitat:

Muß ich eigentlich nach meinem SQL.Text noch ParamCheck := True angeben oder kann das wegfallen?
Muß auf true stehen.

LOMBI 7. Jul 2006 11:13

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo,

Zitat:

Zitat:

die Übernahme der Kundendaten könntest du im Ereignis OnDblClick() des DBGrid vornehmen. Nach erfolgreicher Übernahme kannst du dann ModalResult auf mrOK setzen und dein modaler Auswahldialog wird geschlossen.
Delphi-Quellcode:
procedure TFKundenListe.DBGridKundenDblClick(Sender: TObject);
begin
  if ModalResult = mrOK then
  FRechnungen.EditMatch.Text := FKunden.EditMatch.Text;
  Close;
end;
Leider immer noch keine Datenübernahme in EditMatch auf Form Rechnung.
Wer hilft mir bitte?

Gruß
Lombi

mkinzler 7. Jul 2006 11:23

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Füge mal ein
Delphi-Quellcode:
FRechnungen.Update;
ein.

marabu 7. Jul 2006 11:35

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo Lombi,

Delphi-Quellcode:
procedure TFKundenListe.DBGridKundenDblClick(Sender: TObject);
begin
  FRechnungen.EditMatch.Text := FKunden.EditMatch.Text;
  ModalResult := mrOK;
end;
erst musst du die Daten übernehmen, dann schließt du das Fenster indem du ModalResult auf mrOK setzt. Die Anzeige im anderen Fenster müsste durch die Zuweisung eigentlich automatisch aktualisiert worden sein.

Grüße vom marabu

raiguen 7. Jul 2006 12:41

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Hallo LOMBI,

ich würde folgende Vorgehensweise empfehlen:
auf dem Rechnungsformular einen Button 'Kundensuche' plazieren mit dem OnClickEreignis
Code:
procedure TFRechnung.ButtonKundenSucheClick(Sender: TObject);
begin
  //--ist die Form schon vorhanden?
  if not Assigned(FKundenListe) then
    Application.CreateForm(TFKundenListe, FKundenListe);
 
  //--KundenListe Modal anzeigen
  if FKundenListe.ShowModal = mrOK then
    begin
      FRechnung.EditNName.Text := FKundenListe.qryKunden.FieldByName('NName').Text;
      FRechnung.EditVName.Text := FKundenListe.qryKunden.FieldByName('VName').Text;
      //..
  end;
  //--> qryKunden steht für die Suchabfrage nach Kunden
end;
In der (allgemein verwendbaren) Form FKundenListe diese um ein EingabeFeld 'EditSuch' erweitern und hier am besten im OnKeyPress (sofern Key=#13 -> RETURN-Taste) die Suche starten. Egal, ob nun exakt ein Kunde gefunden wurde oder gar mehrere, per Doppelclick in das DBGrid übergibst Du den ausgewählten Kunden dann an das Rechnungsformular:
Code:
procedure TFKundenListe.DBGridKundenDblClick(Sender: TObject);
begin
  ModalResult = mrOK ;
end;
Die Suche sollte immer erst dann gestartet werden, wenn das Eingabefeld mit RETURN abgeschlossen wurde, um unnötige Suchvorgänge bei jedem Tastendruck zu sparen...

Das nur mal so als Denkanstoß ;-) Viellcht hilft Dir das weiter..

LOMBI 7. Jul 2006 15:27

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Herzlichen Dank an Euch!

Hier ist mein Ergebnis:

Delphi-Quellcode:
procedure TFKundenListe.DBGridKundenDblClick(Sender: TObject);
begin
  FRechnungen.EditMatch.Text := FKunden.QueryKunden.FieldByName('NName').Text;
  ModalResult := mrOK;
  Close;
end;
ModalResult := mrOK reicht allein nicht, um die KundenListe zu schließen.
Die Forms sind bei mir mit Form.Show und nicht mit Form.ShowModal geöffnet und deshalb "Close".

Beste Grüße
Lombi

mkinzler 7. Jul 2006 15:29

Re: Kunden auf Rechnungsform eingeben/anzeigen
 
Zitat:

Die Forms sind bei mir mit Form.Show und nicht mit Form.ShowModal geöffnet und deshalb "Close".
Dann kannst du das Modalresult weglassen und durch ein
Delphi-Quellcode:
FRechnungen.Update;
ersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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