Seite 1 von 1
Databrowser.find Syntax
Verfasst: Di 11. Jun 2024, 17:36
von hansheiser
Hi,
es funktioniert nicht :-/
Beispiel:
Databrowser1 enthält als erste Spalte 'drive_index'.
Einer der Datensätze enthält in drive_index den Eintrag 'testIndex'
Wie müsste dann das entsprechende Databrowser.find Argument aussehen um die Zeile mit diesem
Datensatz anzuspringen?
Ich habe u.A. Databrowser.find("drive_index='testIndex'") und fast alle möglichen Varianten davon getestet
Fehler ist immer:
Query failed: You have an error in your SQL-Syntax.
Re: Databrowser.find Syntax
Verfasst: Fr 14. Jun 2024, 16:47
von Honsek
Hallo hansheiser,
ich arbeite immer nur direkt auf der SQL-Ebene. Das hat auch gute Gründe. Erstens mache ich das bei Datenbanken schon seit über 40 Jahren erfolgreich und zweitens verstecken die von Dir angegebenen Methoden die dahinter liegenden SQL-Anweisungen. Deshalb bleiben alle angegebenen Fehlermeldungen nebulös. Beachte auch, dass dieser Databrowser eine gambas-spezifische 'Erfindung' ist. Sonst gilt dieser Satz aus der Dokumentation: If you don't need database independence, do as you like! :-) .
Mit folgenden Anweisungen kommst Du sicher zum Ziel:
- SQL-Anweisung erzeugen
- Datenbank-Result erzeugen
- Datenbank-Result in geeigneter Weise anzeigen/auswerten
Code: Alles auswählen
sSQL = "SELECT drive_index"
sSQL &= " FROM " & sDBTable_Name
sSQl &= " WHERE drive_index = 'testIndex' "
$rCurDBResult = DB.Current.Exec(sSQL)
ShowData($rCurDBResult)
Ich nutze in der Funktion ShowData($rCurDBResult) eine TableView zur Anzeige der ausgewählten Datensätze.
Mit freundlichem Gruß
Honsek
Re: Databrowser.find Syntax
Verfasst: Sa 15. Jun 2024, 13:35
von hansheiser
Hi,
ich hab's jetzt so gelöst, das ich die (Datasource-)Filterung
'selber' mache, anstatt die Datasource.filter-Funktion zu benutzen.
Ich setze also die kompletten SQL-Filter direkt selber, anstatt
Datasource.filter zu nehmen.
Das ist wahrscheinlich das, worauf du dich in deinem Post beziehst.
Beim Suchen in einem in Benutzung befindlichen Databrowser hilft
das natürlich nicht. Der Databrowser soll (und stellt auch) die
durch meine SQL-Select-Befehle ausgewählten Datensätze dar.
Allerdings möchte ich darin schon die Möglichkeit haben Datensätze
nach bestimmten Krikerien anzuspringen, da hilft die grundsätzliche
Filterung wie oben beschrieben nicht weiter.
Aber auch dafür habe ich jetzt auf eigene Programmierung zurückgegriffen.
Ich durchsuche die Databrowser-Zeilen selbst, bis ich das gesuchte
gefunden habe. Sicher nicht optimal, funktioniert aber zumindest.
Trotzdem wäre es im Sinne von 'ich will's wissen / muss doch gehen'
interessant die Funkionen (Databroswer.find / Datasource.filter)
zum laufen zu bekommen.
Gruss
Re: Databrowser.find Syntax
Verfasst: So 23. Jun 2024, 14:03
von Honsek
Hallo hansheiser.
Für die Arbeit mit Datenbanken gilt uneingeschränkt der Hinweis von Christof Thalhofer: Nach Möglichkeit immer das genutzte DBMS die Arbeit machen lassen und nicht Daten massenhaft in den DB-Client einlesen und dort verarbeiten. Diesem Hinweis folge ich. Er erfordert, dass man die SQL-Anweisungen sorgsam entwickelt und testet. Ich nutze dafür konsequent einen DB-Client für die Konsole, denn es macht durchaus einen Unterschied, ob man SQLite oder PostgreSQL oder MySQL verwendet.
Diesen Satz von Dir: 'Allerdings möchte ich darin schon die Möglichkeit haben Datensätze nach bestimmten Krikerien anzuspringen, da hilft die grundsätzliche Filterung wie oben beschrieben nicht weiter.' habe ich nicht verstanden. Könntest Du genauer beschreiben, was damit gemeint ist - nur dann könnte ich Dir u.U. helfen.
Mit freundlichem Gruß
Honsek
Re: Databrowser.find Syntax
Verfasst: Sa 25. Jan 2025, 23:07
von Poly
Hallo zusammen,
hansheiser hat geschrieben: ↑Sa 15. Jun 2024, 13:35
Trotzdem wäre es im Sinne von 'ich will's wissen / muss doch gehen'
interessant die Funkionen (Databroswer.find / Datasource.filter)
zum laufen zu bekommen.
Dem kann ich nur zustimmen und ich kann nur bestätigen, dass es mir auch nicht gelingt.
DB.Subst und Select
Ich habe es auch mit DB.Subst versucht und kein Erfolg gehabt.
gambas codeDataView1.Find(DB.Subst("SELECT * FROM [&1] WHERE '&2'= &3", "Tabelle1", "Vorname", "Peter"))
genauso scheitert der Versuch bei FindNext
Bei mir gibt es immer den Fehler:
Query failed near ")" wenn ich zusätzlich eine DataSource.Table per Select-Code angebe.
oder
Query failed near: SELECT wenn ich die Tabelle in der IDE ohne weitere Angaben einstelle.
Die gleiche DB.Subst funktioniert hingegen bei Datasource1.Table.
Ohne Select
Wenn ich aber die Wiki richtig verstehe, so sollte ja nur der
WHERE Teil hier angegeben werden.
https://gambaswiki.org/wiki/comp/gb.db. ... aview/find
aber auch auf diese Weise habe ich schon alles versucht ..... ohne Erfolg:
zum Beispiel:
gambas codeDataView1.Find(DB.Subst("WHERE '&1' = &2", "Vorname", "Mia"))
Datasource.Filter
Datasource.Filter bekomme ich aber hin, z.B. mit
gambas code
DataSource1.Filter = "Vorname Like 'R%'"
DataSource1.Filter = "Vorname = 'Lisa'"
Re: Databrowser.find Syntax
Verfasst: Di 28. Jan 2025, 00:08
von Poly
Also ich lasse meinen vorherigen Beitrag stehen, weil er zeigt, wie ich alles mögliche ausprobiert habe.
Aber die
Lösung für den
Find-Syntax ist dann doch gar nicht so schwer.
einfach noch das
Where weglassen.
gambas codeDataView1.Find("Vorname='Peter'")
das gleiche geht auch mit einer
AND oder
OR Verknüpfung
gambas codeDataView1.Find("Vorname='Peter' AND Nachmane='Mustermann'")
und wenn ich diesen Satz hier aus der englischen Anleitung richtig lese:
Extra arguments are substituted inside the Where string, like the DB.Subst method.
https://gambaswiki.org/wiki/comp/gb.db. ... owser/find
Es wird also wie unter der Benutzung von DB.Subst substituiert, aber eben nicht mit, sondern das passiert innerhalb der Strings.
Also:
gambas codeDataView1.Find("Vorname=&1 AND Nachname=&2", "Peter", "Mustermann")