Databrowser.find Syntax

Spezielle Fragen zu PostgreSQL, MySQL, SQLite, SQL ...
Antworten
hansheiser
Foriker
Beiträge: 21
Registriert: Do 30. Mai 2024, 18:02
Kontaktdaten:

Databrowser.find Syntax

Beitrag von hansheiser » Di 11. Jun 2024, 17:36

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.

Benutzeravatar
Honsek
Foriker
Beiträge: 516
Registriert: Do 4. Okt 2007, 18:01
Kontaktdaten:

Re: Databrowser.find Syntax

Beitrag von Honsek » Fr 14. Jun 2024, 16:47

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
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

hansheiser
Foriker
Beiträge: 21
Registriert: Do 30. Mai 2024, 18:02
Kontaktdaten:

Re: Databrowser.find Syntax

Beitrag von hansheiser » Sa 15. Jun 2024, 13:35

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

Benutzeravatar
Honsek
Foriker
Beiträge: 516
Registriert: Do 4. Okt 2007, 18:01
Kontaktdaten:

Re: Databrowser.find Syntax

Beitrag von Honsek » So 23. Jun 2024, 14:03

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
Honsek (https://www.gambas-buch.de)
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

Poly
Foriker
Beiträge: 82
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Databrowser.find Syntax

Beitrag von Poly » Sa 25. Jan 2025, 23:07

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 code
DataView1.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 code
DataView1.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'"
Ceterum censeo Goo..... esse delendam

Poly
Foriker
Beiträge: 82
Registriert: Fr 17. Apr 2020, 12:46
Kontaktdaten:

Re: Databrowser.find Syntax

Beitrag von Poly » Di 28. Jan 2025, 00:08

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 code
DataView1.Find("Vorname='Peter'")
das gleiche geht auch mit einer AND oder OR Verknüpfung
gambas code
DataView1.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 code
DataView1.Find("Vorname=&1 AND Nachname=&2", "Peter", "Mustermann")
Ceterum censeo Goo..... esse delendam

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste