Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Locate von UIBDataSet funzt nicht (https://www.delphipraxis.net/154494-locate-von-uibdataset-funzt-nicht.html)

dor557 13. Sep 2010 14:25

Datenbank: Firebird • Version: 2.1 • Zugriff über: UIB

Locate von UIBDataSet funzt nicht
 
Hallo zusammen.

Ich habe ein kleines Problem was mit irgend wie keinen sinn ergibt.

Ich habe Folgenden Code :

Delphi-Quellcode:
 
      // Kundenlist Aktualisieren
         Daten.KundenListe.Close;
         Daten.KundenListe.Open;
         if DSKunden.DataSet.Locate('ID',New_ID, [loPartialKey]) then
         begin
           DBGrid1.SelectedField := DSKunden.DataSet.FieldByName('ID');
           DBGrid1.SetFocus;
         end else ShowMessage('Feld ID mit wert "' + inttostr(NEW_ID) + '" Nicht gefunden.');
Die ID wird mit auch in dem DBgrid angezeigt. aber er findet den Eintrag nicht. KundenListe ist ein TJvUIBDataSet.

Kann es evtl. daran liegen das UIBDataSet diese art der suche nicht unterstützt ? oder muss ich da noch etwas angeben ?

gruss Sascha

mkinzler 13. Sep 2010 14:54

AW: Bin etwas konfuss....
 
Ist das Feld vom Typ Integer?

Luckie 13. Sep 2010 15:00

AW: Bin etwas konfuss....
 
Bitte gib deinem Beitrag einen aussagekräftigen Titel.

dor557 13. Sep 2010 15:06

Locate mit UIB Komponenten
 
Sorry. Habe das etwas vergessen mit dem Namen für den Titel.

Kann das im nachhinein nicht mehr ändern. dazu fehlen mir warscheinlich die Rechte ;)

Also ja das ist ein Integer Wert ! aber er gibt mir keine Fehlermeldung das es der Falsche wert ist.

haentschman 13. Sep 2010 18:54

AW: Locate von UIBDataSet funzt nicht
 
Zitat:

KundenListe ist ein TJvUIBDataSet
...war da nicht mal was, daß die UIB von den Jedis nicht so aktuell waren und eher die UIB Version aus dem SVN genommen werden sollte :gruebel:
Vieleicht ist da dieser "Bug" schon nicht mehr da.

dor557 14. Sep 2010 10:34

AW: Locate von UIBDataSet funzt nicht
 
Der bug den die hatten ist das nur ein datensatz gelesen wurde.

Der ist aber in der version 2.1 behoben die habe ich.

Kann es evtl sein das ich in der Komponente noch etwas zusätzlich angeben muss wie index oder so ?? habe da nur die Felder importiert und fertig !

Oder müsste das auch so gehen ??

und wenn man auf das locate verzichten würde gibt es da noch eine andere möglichkeit ? wie z.b. einen nach dem anderen auswählen und dann bei dem richtigen stehen bleiben. aber das würde wiederum eine folge haben das der User den balken herbalaufen sieht oder ? Hat jemand ne idee ?

gruss Sascha

dor557 15. Sep 2010 07:54

AW: Locate von UIBDataSet funzt nicht
 
So nun habe ich eben das Pferd von einer anderen seite bestiegen.

Ich bin nun hergegangen und habe, da offenbar keine andere Lösung zur verfügung stand, das DBGrid gelöscht und eine TListView genommen und die anzeige auf Report gestellt.

Dann entsprechend die Titel eingefügt und lese dann mit dieser funktion :

Delphi-Quellcode:
Procedure TKundenListeF.KundenListeAktualisieren;
var li    : TListItem;
begin
 KundenlisteView.Items.Clear;
 KundenListeView.Items.BeginUpdate;
 Daten.KundenListe.Open;
 daten.Kundenliste.First;
  repeat
    li := KundenListeView.Items.Add;
    li.Caption := Daten.KundenListeID.AsString;
    Li.SubItems.Add(daten.KundenListeVorname.AsString);
    li.SubItems.Add(Daten.KundenListeNAME.AsString);
    li.SubItems.Add(Daten.KundenlisteStrasse.asstring);
    li.SubItems.Add(Daten.KundenlistePLZ.AsString);
    Li.SubItems.Add(Daten.KundenListeORT.AsString);
    Daten.KundenListe.Next;
  until Daten.KundenListe.Eof;
  Daten.Kundenliste.Close;
  KundenListeView.Items.EndUpdate;
end;
Die daten eben manuell ein. War zwar etwas mehr schreib arbeit aber dafür geht es.

und die Position in der Liste finde ich dann mit Hilfe von

Delphi-Quellcode:
       li := KundenListeView.FindCaption(0, inttostr(S_ID), false, True, False);
       if li <> nil then
       begin
         KundenListeView.Selected := li;
         KundenListeView.ItemFocused := Li;
         li.MakeVisible(True);
         KundenListeView.SetFocus;
       end;
wobei ich da wohl Wishmaster aus Diesem Beitrag danken muss. So kam ich auf die Idee :)

Mein Alter Herr ist der meinung das ich diese Technik nicht verwenden sollte aber der hat leicht reden. Der hat auch genug geld um sich die Enterprise version von Delphi zu holen wo etwas andere komponenten zur verfügung stehen :)

Ich habe nur die Turbo Version...

Aber auch damit geht nur eben etwas schwerer :)

Danke an alle die Mir versucht haben zu helfen und sich den Kopf zerbrochen haben.


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