Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi locate auf query funktioniert nicht (https://www.delphipraxis.net/138227-locate-auf-query-funktioniert-nicht.html)

Barret 5. Aug 2009 12:57

Datenbank: MySQL • Zugriff über: TADOConnection

locate auf query funktioniert nicht
 
Hallo!
Ich hab da so ein kl Problem mit der Locate-Funktion einer query.
Ich Speichere über eine Funktion neue Werte in seine MySQL-DB (INSERT INTO ...). wenn dies geschehen ist update ich die Form, so das der neue Datensatz auch in dem DBGrind enthalten ist. Nun möchte ich aber das ich auf den Datensatz springe den ich zuletzt abgespeichert habe springen. Last-Funktion auf der Query bringt nicht wirklich viel, da der SQL-Befehl nach bestimten Kreterien sortiert. Also habe ich mir das so gedacht:

Delphi-Quellcode:
FMain.showQuVeranstaltungStart; //SQL-String zum Update ausführen und Query öffnen
DMDatenModul.qubenutzer.SQL.Text := 'select max(id) as id from tbl_veranstaltung'; //bestimmen des letzten Eintrages in der DB-Tabelle
DMDatenModul.qubenutzer.Open;
DMDatenModul.quveranstaltung.Locate('id', DMDatenModul.qubenutzer.FieldByName('id').AsVariant, []); //auf letzten Datensatz der DB-Tabelle springen
FillEditFields; //füllen alles Eingabefelder (EditFelder, Listboxen,...)
FMain = Hauptform des Programmes
qubenutzer, quveranstaltung = Query's

Die Felder selbst gibt es alle. Das Programm funktioniert auch wie gewünscht. Außer halt, dass er nicht auf den Datensatz springt.
Was braucht Ihr noch an Infos? Ich bekomme auch keine Fehlermeldung oder etwas in der Art. Wenn ich bei dem Suchparameter AsInteger oder AsString nehme bleibt es bei dem gleichen Ergebnis.
s


edit: Ich habe auch schon nen Teil mit den LocaleOptions probiert. Wenn ich Sie leer lasse passiert wie gesagt nicht. Wenn ich die Eintrage die in der Hilfe stehen kennt er die bezeichner nicht. Und wenn ich mir die Bezeichner selber deklariere dan bekomme ich Fehler durch inkompatible Typen TOptions und Set ....

editII: Jetzt habe ich in die uses DB mit angefügt. Er kennt jetzt die Option "loPartialKey". Aber das Gesamtergebis ist immer noch so, dass es nicht so ist wie ich es haben möchte.

alzaimar 6. Aug 2009 05:34

Re: locate auf query funktioniert nicht
 
Gibt es denn wirklich die neue ID in der 'quVeranstaltung'?

mkinzler 6. Aug 2009 06:35

Re: locate auf query funktioniert nicht
 
Es scheint sich ja um die selbe Tabelle zu handeln.
Befinden sich diese im gleichen Transkationskontext ( beim Einsatz von Transaktionen/einer transaktionsfähigen Storage-Engine)? Wurde nach dem Einfügen, die Datenmeneg aktualisiert (
Delphi-Quellcode:
quveranstaltung.Refresh;
)?

Barret 6. Aug 2009 07:14

Re: locate auf query funktioniert nicht
 
Zitat:

Zitat von mkinzler
..., die Datenmeneg aktualisiert (
Delphi-Quellcode:
quveranstaltung.Refresh;
)?

Ich mach das nicht direkt über ein Refresh. Ich lass das über die showQuVeranstaltungStart-Funktion laufen.
Delphi-Quellcode:
procedure TFMain.showQuVeranstaltungStart;
begin
  with DMDatenModul.quveranstaltung do
  begin
    Close;
    SQL.Text := 'SELECT ...';
    SQL.Add('LEFT JOIN ...');
    Open;
  end;
end;
Das id Feld ist auf jeden fall da. Über Das DBGrid kann ich auch darauf zugreifen. Und die SQL Anweisung zum bestimmen der max Zahl geht auch. (in PHP MyAdmin getestet ...)

Blup 6. Aug 2009 08:07

Re: locate auf query funktioniert nicht
 
Welchen Rückgabewert hat das Locate?

Sherlock 6. Aug 2009 08:29

Re: locate auf query funktioniert nicht
 
Bitte streichen

:wall:

Sherlock

Barret 6. Aug 2009 08:37

Re: locate auf query funktioniert nicht
 
Ich bekomme immer 0 / Null zurück. Hab es eben auch mal mit Lookup versucht... Dan versteh ich aber nur nich, warum er das Feld mit der max. Zahl nicht findet / zuordnen kann nicht findet.
Also is schon mal klar warum er den zeiger nicht setzten kann .. nur die Frage warum er die Zahl nicht übermittelt bekommt.

edit: Wenn ich mir den Wert ausgeben lasse in Program selber bekomme ich auch den richtigen Index ausgegeben... Also kann irgendetwas im Locate selber nicht stimmen. Muss ich da noch was bestimmtes in den uses für mit einbinden?

alzaimar 6. Aug 2009 08:48

Re: locate auf query funktioniert nicht
 
Diese =)(/%%&$§-Locate-Funktion funktioniert manchmal, manchmal nicht. Speziell bei berechneten Feldern klappt das nicht alles so, wie es sollte.
Versuch die mal. Die sucht nur nach einem Feld.
Delphi-Quellcode:
Function csLocate (aDS : TDataSet; aField : String; aValue : Integer) : Boolean;
Var
  B : TBookmark;

Begin
  B := aDS.GetBookmark;
  aDS.DisableControls;
  Try
    aDS.First;
    Result := True;
    While not aDS.Eof do
      If aDS.FieldValues [aField] = aValue Then
        Exit
      Else
        aDS.next;
    Result := False;
    aDS.GotoBookmark(B);
  Finally
    aDS.FreeBookMark(B);
    aDS.EnableControls;
  End
End;
Getippt und nicht getestet.

Barret 6. Aug 2009 09:50

Re: locate auf query funktioniert nicht
 
Vielen Dank alzaimar!!! Jetzt is es genauso wie ich es Haben wollte!!! *jubel jubel freu freu*
g


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