Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Label, Editfeld und DBlookupListbox (https://www.delphipraxis.net/2435-label-editfeld-und-dblookuplistbox.html)

Hansa 24. Jan 2003 11:39

Hi,

Zitat:

Zitat von X-Dragon
Kann man nicht die ID direkt als String auslesen?

Nein, kann man nicht ! Die ID ist in der DB als integer hinterlegt.

Etwas einfacher geht es aber schon (so wie ich es am Anfangang gemacht habe :
Zitat:

]Mit FieldValues können Sie auf die Werte der Felder in einer Datenmenge zugreifen. Geben Sie einfach das gewünschte Feld mit dem Parameter FieldName an.
Bei mir also so:

WGDS.FieldValues ['ID'];

Dann entfällt die Typumwandlung, bzw. wird sie intern gemacht !!

Zitat:

Zitat von X-Dragon
Aber eventuell dann noch das "=" durch LIKE ersetzen, falls dann eine Fehlermeldugn kommt "Type Mismatch ..." :).

Nee, nee. Fange nicht auch noch solchen Unfug an. :mrgreen: :spin: = wird benutzt bei genauen Vergleichen und LIKE mit % usw. bei ungenauen Vergleichen, Suchen usw. LIKE ohne % ist bei mir gleich =. :witch:

Gruß
Hansa

Hansa 24. Jan 2003 11:42

@harrybo : das da drucke ich mir aus, hol es mit und lese es zum Nachtisch. :lol: Auf den ersten Blick ist das das Gesuchte!

Gruß
Hansa

Sharky 24. Jan 2003 11:50

Zitat:

Zitat von Hansa
Hi,

Zitat:

Zitat von X-Dragon
Kann man nicht die ID direkt als String auslesen?

Nein, kann man nicht ! Die ID ist in der DB als integer hinterlegt.

Warum soll das nicht gehen?

Durch das .AsString Sagst Du deinem DataSet nämlich wie Du es haben möchtest.

Ich kann z.B. folgendes machen.
In der Tabelle ist das Feld NUMMER als Integer deklariert.

Code:
 var
  i_nummer  : Integer;
  s_nummer  : String;

begin
 i_nummer := Query1.FieldByName ('nummer').AsInteger;
 s_nummer := Query1.FieldByName ('nummer').AsString;
end;
Zumindest geht das so bei mir.

Hansa 24. Jan 2003 12:16

Hi Sharky,

das stimmt ja alles, aber guck Dir mal die Beiträge weiter oben an. FieldValues gibt es ja auch noch :!:

Gruß
Hansa

Hansa 24. Jan 2003 13:23

Hi,

Zitat:

Zitat von harrybo
WGDS.Params.CreateParam(ftInteger, 'ID');

Das da compiliert er bei mir nicht. Im OI finde ich das auch nicht. Wahrscheinlich liegt es daran, daß ich nicht IBX sondern FIBplus verwende. Weiß dazu jemand was ? Glaube nicht. Dann werde ich wohl oder übel mein englisch bemühen müssen, um einem Russen eine Frage zu stellen. :mrgreen:

Gruß
Hansa

X-Dragon 24. Jan 2003 13:47

Zitat:

Zitat von Hansa
...

Nee, nee. Fange nicht auch noch solchen Unfug an. :mrgreen: :spin: = wird benutzt bei genauen Vergleichen und LIKE mit % usw. bei ungenauen Vergleichen, Suchen usw. LIKE ohne % ist bei mir gleich =. :witch:

Gruß
Hansa

Hab ich auch gedacht, bis ich das Problem bei der DBase-DB hatte. Also immer trifft das nicht zu, kannst ja nochmal in meinen Thread schauen :).

harrybo 24. Jan 2003 14:19

Hi Hansa,
das liegt wahrscheinlich nicht am Unterschied zwischen FIBplus und IBX, ich wusste nur nicht, womit Du überhaupt arbeitest. Die Sache ist für Dich dann einfacher, die Queries haben automatische Parameter (siehe Object Inspector). Du brauchst den Parameter nicht zu definieren und kannst einfach zuweisen, z.B. mit
Delphi-Quellcode:
Query1.Params[0].Value := APar;
Gibt es keinen Parameter, wird er angelegt.

Hier mal eine allgemeine Funktion, die ein Dataset mit einem Parameter refreshed (IBX und Interbase). Übergeben wird das Dataset Object, der Wert des Parameters, der ID Wert auf den der Datensatzzeiger positioniert werden soll, Konstante, die sagt, was mit der laufenden Transaction passieren soll:
Delphi-Quellcode:
procedure TDM.RequeryDS1(ADataset: TIBDataset; APar: variant; AID: longint; AType: integer);
begin
  with ADataset do try
    DisableControls;
    if Active then if State in [dsEdit, dsInsert] then Post;
    Close;
    if Transaction.InTransaction then
      case AType of
        c_Commit       : Transaction.Commit;
        c_CommitRetain : Transaction.CommitRetaining;
        c_Rollback     : Transaction.Rollback;
      end;
    if not Transaction.InTransaction then Transaction.StartTransaction;
    Params[0].Value := APar;
    Active := true;
    if AID > 0 then Locate(Fields[0].FieldName, AID, []);
  finally
    EnableControls;
  end;
end;
gruß, harrybo

Hansa 24. Jan 2003 19:29

Hi harrybo,

wo kommt denn das RequeryDS1 hin ? Du scheinst da eine allgemeine Prozedur geschrieben zu haben. Im OI ist hierüber jedenfalls nichts zu finden.

Gruß
Hansa

harrybo 24. Jan 2003 21:30

Hi Hansa,
ja, es ist eine selfmade Procedure, die bei mir im Datamodul und dort im Public Abschnitt, damit man von draußen Zugrif drauf hat. Da ein Datamodul meist mehrere TDataset Objekte versammelt, kann man der Procedure noch mitteilen, welchen Dataset man aktualisieren will. Der Aufruf kann dann so aussehen:
Delphi-Quellcode:
DM.RequeryDS1(DM.dsTER, gActDate, gActRec.TER, c_Commit);
DM.dsTER ist hier ein TDataset, der Rest spricht für sich, hoffe ich (nach meinen Erfahrungen mit X-Dragon trau ich mich ja kaum noch, feste Werte irgendwo reinzuschreiben).

gruß, harrybo

P.S. sieht nach Master Detail aus, was Du vorhast. Da gibt es ja, zumindest bei IBX, die code-lose Variante mit zusätzlicher Datasource, die wunderbar läuft (ok, ein einziger BeforeInsert Trick).

Hansa 26. Jan 2003 11:54

Hi,

Zitat:

trau ich mich ja kaum noch, feste Werte irgendwo reinzuschreiben).
Kommt drauf an, wem Du das schreibst. :mrgreen: Bei mir kannst Du es ruhig reinschreiben. Komme mit den Parametern nämlich nicht so ganz klar. Kannst Du mir die mal kurz erklären ? Ich habe mir mal mein Programm neu angesehen und dabei gemerkt, daß ich so eine Prozedur gut gebrauchen könnte. Wahrscheinlich aber modifiziert.

Gruß
Hansa


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Seite 2 von 3     12 3      

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