Locate friert DBGrid ein??

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Locate friert DBGrid ein??

Beitrag von starkard »

Hallo Leute,

Habe seit einigen Wochen ein Problem wenn ich "locate" ausführe um in einem DBGrid auf einen Wert zu tracken. z.B. so etwas:

Code: Alles auswählen

if auftragsdaten.TestID<>'' then SQLQuery1.Locate('ID', auftragsdaten.TestID, [loCaseInsensitive]);
Danach scheint das DBGrid einzufrieren. Das scrollen funktioniert dann nur noch unkontrolliert und Zeilen lassen sich nicht mehr markieren. Es scheint aber wirklich nur ein Darstellungsproblem zu sein, da das folgende Abfragen auf die Queryfelder andere Ergebnisse bringen.

Arbeite seit längeren immer mit der aktuellen trunkversion von Lazarus 9.27 und dem FPC 2.2.2 Mysql 5.* .Dachte womöglich liegt es an einer defekten Revision von Lazarus, da derselbe Code mit Lazarus 9.25 nicht aufgetreten ist. Nach jetzt mehreren Updates ist aber dieser Effekte geblieben.

Meine Frage also: Wie kann ich dieses Problem lösen?
Würde natürlich gerne locate mit einem SQL zu ersetzten, kann dies aber leider nicht realisieren. Z.B bei folgendem Befehl:

Code: Alles auswählen

"SELECT * FROM table WHERE TestID=auftragsdaten.TestID"
würde das DBGrid nur ein DS anzeigen. Locate hingegen (mit entsprechendem SQLbefehl) alle und wie gewünscht den gesuchten DS anzeigen.

Hoffe die Beschreibung ist verständlich genug. Kann mir jemand weiterhelfen?
Danke

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: Locate friert DBGrid ein??

Beitrag von piper62 »

1. hast Du es auch mit der aktuellen Stable Version 0.9.26 versucht?

2. Ich realisiere Suchfunktionen fast immer über das Select Statement:

auftragsdataen.TestID ist offensichtlich ein String.
Dann beispielsweise so:

Code: Alles auswählen

with ZQuery1 do
Begin
   SQL.Clear;
   SQL.Add('SELECT * FROM table WHERE TestID="'+auftragsdaten.TestID+'"');
   SQL.Open;
End;
Oder für die Suche nach einem Namen z.Bsp.

Code: Alles auswählen

with ZQuery1 do
Begin
   SQL.Clear;
   SQL.Add('SELECT * FROM table WHERE TestName LIKE "'+auftragsdaten.TestName+'"');
   SQL.Open;
End;
Dabei kann dann auch über den Suchstring z.Bsp. mit der Wildcard "%" gesucht werden: "Schu%" selektiert alle die mit "Schu" anfangen.

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Re: Locate friert DBGrid ein??

Beitrag von starkard »

Danke erstmal für deine Antwort,

Hab jetzt eine ältere releaseversion installiert (http://svn.freepascal.org/svn/lazarus/t ... rus_0_9_26" onclick="window.open(this.href);return false; ist das die stableversion??).
Leider ist das Problem mit "locate" geblieben.

Ein Sql-Statement kann nach meinem Wissen nicht locate ersetzen, da wie erwähnt locate auch innerhalb einer bestehenden Ergebnissmenge einen gesuchten DS selektieren kann.

Hat jemand dieselben Probleme mit locate? Was könnte ich noch versuchen. Thx

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Locate friert DBGrid ein??

Beitrag von Christian »

Was für eine Datenbankschnittstelle benutzt du denn ?
ZeOS,Dbf,SQLite hatte ich nie probleme das sich locate irgendwo aufgeängt hat
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Re: Locate friert DBGrid ein??

Beitrag von starkard »

also ich benutze die standard SQLdb von Lazarus. Habe übrigens das selbe Phänomen wenn ich unter Windows kompiliere. Das Programm stürzt auch nicht ab sondern die Markierung in einem DBGrid scheint zu "haken" und springt bei anwahl einer anderen Zeile mal gar nicht oder mal unkontrolliert an eine andere Stelle. Könnte mal vielleicht die DBschnittstelle wechseln, obwohl ich nicht glaube das es damit zusammenhängt... Welche ist denn zu empfehlen? Thx

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Locate friert DBGrid ein??

Beitrag von MmVisual »

Ich hatte auch mal so ein Problem.

Dann hatte ich nur so zum Test ein Button rein gesetzt und darin .EnableControls ausgeführt. Nachdem ich dann einmal diesen Button gedrückt hatte ging auch mein Grid wieder. (Und ich fand den Fehler auch...)

Die Beste Datenbank-Komponente, die ich kenne ist die ZeosDBO, gibts hier:
http://sourceforge.net/project/showfile ... p_id=35994" onclick="window.open(this.href);return false;
(zeosdbo-6.6.3-stable)

Funktioniert einfach, schnell und zuverlässig! Und man kann im TZQuery auch ein Update-Object ran tun, dann kann man problemlos (etwas programmierung ist schon nötig) auch Tabellen mit verschachtelten JOIN Abfragen editieren...
EleLa - Elektronik Lagerverwaltung - www.elela.de

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Locate friert DBGrid ein??

Beitrag von Christian »

In beiden Fällen habt ihr wohl irgendwo ein Disablecontrols zuviel aufgerufen und dadurch waren die Datensensitiven controls noch gesperrt.
Bei SQL passierts auch schnell mal das man ein Query nochmal ausführt wärend die Controls disabled si9nd dann bekommt man sie teilweise gar nicht mehr geenabled.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten