SQL mit WHERE gibt einen Laufzeitfehler

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Jan »

Hallo,

nach meiner Session beim Forentreffen haben wir einen anderen Weg versucht, den aktuellen Datensatz dynamisch in ein DataObject zu ziehen. Ich hatte eine Lösung gezeigt, die aber mit Makro-Operatren arbeitet. Was erfahrungsgemäß eher langsamer ist.

Till hatte 2013 auf dem Teffen einen anderen Lösungsansatz gezeigt, der auf SQL-Syntax beruht. Der aber eine komplette Datenbank in ein Array aus DataObjetcs einließt. Möchte ich nun nur den aktuellen Satz einlesen, dann muß ich eine Bedingung setzen. Also ein WHERE einbauen. Das klappt aber nicht. Auch alle Beispiele von Alaska, die ein WHERE beinhalten, haben dort immer einen hart kodierten Vergleich drin. Ein Vergleich auf eine Variable, wie ich ihn hier brauche klappt aber nicht.

Code: Alles auswählen

Use adressen NEW
cName := adressen->name
SELECT * FROM adressen WHERE name = cName
Ergibt Fehlermeldung:

Code: Alles auswählen

Xbase++ Version     : Xbase++ (R) Version 2.00.575
Betriebssystem      : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: U VALUE: NIL
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : No such column: cName [S1]
oError:filename     :
oError:genCode      :       9002
oError:operation    : USQLSTATEMENT:QUERY
oError:osCode       :          0
oError:severity     :          2
oError:subCode      :          1
oError:subSystem    : Local SQL
oError:thread       :          1
oError:tries        :          0
Wie kann ich ein WHERE mit einem Variableninhalt ausführen?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von georg »

Hallo, Jan -


cSelect := "SELECT * FROM tabelle WHERE feld = '" + cSuchbegriff + "'"

Bitte beachten, dass Characterstrings, nach denen man sucht, in ' (einfache Anführungszeichen) gesetzt werden müssen. Begriffe in " (Gänsefüsschen) werden als Namen von MySQL-Variablen interpretiert. MySQL unterscheidet (im Gegensatz zu xBase) klar zwischen ' und ", wenn es um Strings geht.

Deine Syntax führt dazu, dass der SQL-Server nach einer SQL-(!)-Spalte mit dem Namen cName sucht, aber nicht findet.

Ich hoffe, das hilft Dir.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

In deinem Beispiel hast du einen Datensatz eingelesen als Ersatz für ein Array mit satter ... das ist völlig in Ordnung ... die SQL Abfrage ist gut, aber wenn ich alle Sätze durchlaufe, wird in großen Datenbeständen die Ergebnismenge sehr groß werden. Außerdem will man eventuell das Programm nicht viel ändern.

Dein Beispiel war völlig Ok und nicht langsam !
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Die Rechtschreibhilfe verweigert die Funktionsnamen, ich meine die interne Funktion für das einlesen eines ganzen Satzes.

Im übrigen ist das hier das Gleiche wie bei allen Befehlen. Zur Ausführungszeit sind local variablen nicht mehr bekannt.

PS: aus dem Zug mit smartphone im ICE WLAN ... geht super.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Tom »

Das Irritierende dabei ist, dass SQL-Syntax (Georg: Es geht nicht um MySQL, sondern um Universal SQL in der 2.0 - hier im Kontext mit DBF-Tabellen) mit propreitärer Syntax gemischt wird.
In etwa vollständig lautete die Originalzeile aus dem Dataobjects-Beispiel "SELECT ... FROM Adressen ... INTO OBJECTs aObj". "INTO OBJECTs" ist meiner Kenntnis nach keine SQL-Syntax, referenziert aber hier das Xbase-Objektmodell bzw. eine lokale Variable (aObj). Es entsteht also der Eindruck, man könne beides, weshalb "WHERE name = cName" eine nachvollziehbare Idee ist. Möglicherweise gibt es hierfür sogar eine Lösung (die Doku ist noch nicht ganz vollständig, soweit ich weiß). Ob der Umweg über den zu interpretierenden String noch in Verbindung mit "INTO ..." funktioniert, wäre dann die nächste Frage.
Herzlich,
Tom
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von georg »

Hallo, Tom -


danke für die Information.

In dem Fall wäre es aber doch auf jeden Fall interessant, sich mal die .ppo-Datei an dieser Stelle anzuschauen, dies könnte mal einen Hinweis geben, wie die Anweisung umgesetzt wird.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Tom »

Hallo, Georg.

Meines Erachtens wurde der Anteil, der korrekter SQL-Syntax entspricht, an eine entsprechende Interpreterfunktion/-methode übergeben, und der "INTO"-Anteil als ergänzender Parameter per Referenz.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Wenn hier "WHERE name = cName" die Variable cName eine privat ist, sollte es auch gehen.
Genauso wie bei USE cDBF ... aber eben NICHT mit local.

USE (cDBF) reicht dazu zwar aus, da aber oben noch ' ' darum kommen geht das so nicht.

Wenn man das ganze als Funktion aufrufen könnte wäre das einfacher ... Jans Fehlermeldung wies ja auf USQLstatement (oder so ähnlich) hin.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Jan »

Hubert,

Tom und ich haben nach meiner Session einiges rumprobiert. Es klappt nicht. Auch nicht mit PUBLIC oder PRIVATE, keine " und auch keine ' (wobei beides auch syntaktisch falsch wäre).

Ich hab das ja auch in der entsprechenden Newsgroup von Alaska gepostet, mal schauen was da kommt. Wobei - seit dem 23. März hat es da von Alaska keine einzige Antwort mehr gegeben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von georg »

Hallo, Jan -


kannst Du mal mit .ppo compilieren und den Ausschnitt posten, wo die SELECT-Anweisung umgesetzt wird? Ich habe keinen Rechner greifbar, auf dem die 2.0 installiert wäre, so dass ich das selbst machen könnte.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Martin Altmann »

Georg,
wie Tom bereits schrieb wird das mit einer gekapselten USQL()-Funktion ersetzt - hilft leider nicht wirklich viel weiter...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

ich bekomme aktuell noch nicht einmal ein Ergebnis zurück ... der Mischmasch ist gewöhnungsbedürftig ...
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Martin Altmann »

Ich saß neben Wolfgang bei den Vorträgen und er hat von dem Beispiel ein .ppo erzeugt.
Vielleicht kann er die Zeile daraus ja mal hier posten.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

irgendwie stehe ich auf dem Schlauch.

ich dachte das geht ...

Code: Alles auswählen

use test alias db
msgbox( "Anzahl: "+ntrim(lastrec()),"Info") // das gibt die richtige Zahl zurück

SELECT * FROM test INTO OBJECTS aData
msgbox("Anzahl Treffer: "+len(aData)) // 0 Treffer ...
gibt Fehlermeldung:
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\Users\BRANDELH\Documents\Xbase++\Projects\test\test.exe" Datum: 27.04.2015 12:51:56

Xbase++ Version : Xbase++ (R) Version 2.00.575
Betriebssystem : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: U VALUE: NIL
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Table(test) not used in workarea.
oError:filename :
oError:genCode : 9999
oError:operation : USQLSTATEMENT:REWRITETABLE
oError:osCode : 0
oError:severity : 2
oError:subCode : 9999
oError:subSystem : USQL
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from MAIN(51)
klar, test ist da der name auf Festplatte, also alias angeben ... aktuell im gleichen Selectbereich !

Code: Alles auswählen

   use test alias db
   msgbox( "Anzahl: "+ntrim(lastrec()),"Info")

   SELECT * FROM db INTO OBJECTS aData

   msgbox("Anzahl Treffer: "+len(aData))
gibt Fehlermeldung
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\Users\BRANDELH\Documents\Xbase++\Projects\test\test.exe" Datum: 27.04.2015 12:53:02

Xbase++ Version : Xbase++ (R) Version 2.00.575
Betriebssystem : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Interne Datenstrukturen besch„digt
oError:filename :
oError:genCode : 41
oError:operation :
oError:osCode : 0
oError:severity : 2
oError:subCode : 5
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von USQLSTATEMENT:CREATEVIRTUALTABLEFROMWORKAREA(245)
Aufgerufen von USQLSTATEMENT:REWRITETABLE(285)
Aufgerufen von ABSTRACTSQLSTATEMENTBUILDER:FROM(269)
Aufgerufen von MAIN(51)
wie war das mit TABLE und DATABASE ?
Muss ich zuerst einen anderen SELECTBEREICH wählen ?

Code: Alles auswählen

   select 1

   use test alias db
   msgbox( "Anzahl: "+ntrim(lastrec()),"Info")

   select 2 // nimm einen

   SELECT * FROM db INTO OBJECTS aData

   msgbox("Anzahl Treffer: "+len(aData))
so auch nicht ...
------------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\Users\BRANDELH\Documents\Xbase++\Projects\test\test.exe" Datum: 27.04.2015 12:56:55

Xbase++ Version : Xbase++ (R) Version 2.00.575
Betriebssystem : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Interne Datenstrukturen besch„digt
oError:filename :
oError:genCode : 41
oError:operation :
oError:osCode : 0
oError:severity : 2
oError:subCode : 5
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von USQLSTATEMENT:CREATEVIRTUALTABLEFROMWORKAREA(245)
Aufgerufen von USQLSTATEMENT:REWRITETABLE(285)
Aufgerufen von ABSTRACTSQLSTATEMENTBUILDER:FROM(269)
Aufgerufen von MAIN(55)
JA WIE DENN DANN ???
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Martin Altmann hat geschrieben:Ich saß neben Wolfgang bei den Vorträgen und er hat von dem Beispiel ein .ppo erzeugt.
Vielleicht kann er die Zeile daraus ja mal hier posten.
Viele Grüße,
Martin
nun zum PPO ... wie stellt man in der IDE "/P" ein ? Ich habe es per Hand eingebaut:

Code: Alles auswählen

AUS:
   SELECT * FROM user where name='Hans' INTO OBJECTS aData

WIRD:
   USqlStatement():New():Select( {{ 1 }} ):From( {{"user"}} ):Where( {|| name='Hans' } ):Build():Query( 4, @aData )
damit liese sich schon was anfangen, aber das ist ja mega unübersichtlich !
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Martin Altmann »

In der IDE gar nicht - musst Du in der XPJ erledigen.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Martin Altmann hat geschrieben:In der IDE gar nicht - musst Du in der XPJ erledigen.
habe ich gemacht und das Ergebnis von oben erhalten ...

das einzige Beispiel mit SQL das ich gefunden habe ist der SQLBrowser, der gleich wieder UPSIZEN will ...
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Martin Altmann »

Hubert,
genau die Zeile meinte ich auch (in Bezug auf meine Bitte an Wolfgang, sie hier zu veröffentlichen) - hilft also in dem Fall leider gar nicht weiter!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

warum nicht, man sieht doch den Codeblock, bei IHM ist es nur ein anderes Feld, in dem Codeblock könnte man das selbst einbauen ... oder übersehe ich jetzt was ?

Code: Alles auswählen

:Where( {|| name='Hans' } )
sollte so funktieren, wenn vom COMPILER übersetzt (XBASE):

Code: Alles auswählen

:Where( {|| name=cSuchName } )
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Martin Altmann »

Ah - ok, jetzt weiß ich, was Du meinst!
Mir war das nicht ausreichend - ich wollte das "echte" SQL-Statement sehen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

das habe leider ICH nicht ;-)
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von Tom »

Hubert -

hast Du "aData" deklariert?
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Ich habe ein SQLite Beispiel gefunden, bei dem ich die Syntax von SELECT WHERE prüfen konnte:

Code: Alles auswählen

// originaler Aufruf
SELECT * FROM customers WHERE city="London" INTO OBJECTS aData

// das funktioniert auch !
cSuche := "London"
SELECT * FROM customers WHERE city=&(cSuche) INTO OBJECTS aData
Wenn man wissen will, was an tatsächlich an den Server geht, dafür gibt es eine Methode:

Code: Alles auswählen

:asString() 
allerdings hat man bei der direkten SQL in QUELLCODE Eingabe kein Objekt ...
wenn man eines hätte, kann man in der Hilfe zu dieser Methode lesen wie man den Suchparameter übergeben sollte:

Code: Alles auswählen

 oStmt := DacSqlStatement():fromChar("SELECT * FROM customers WHERE city==::SearchTerm")
 oStmt:SearchTerm := "Berlin"
 // Prints: SELECT * FROM customers WHERE city='Berlin'
 ? oStmt:Build():asString() 
allerdings sehe ich bei DBF Dateien OHNE die ODBCDBF kein DacSession() Objekt dass diese benötigt.
Inwieweit USQLStatement() von SQLStatement() abstammt ist aus der Hilfe nicht zu entnehmen.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Tom hat geschrieben:Hubert -
hast Du "aData" deklariert?
ja, aber hier nicht gezeigt:

local aData := {}

... sollte aber auch mit

aData := NIL

funktionieren, da aData per Referenz übergeben wird.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SQL mit WHERE gibt einen Laufzeitfehler

Beitrag von brandelh »

Nach Toms Hinweis habe ich auch mit einer anderen DBF getestet und siehe da, das Problem hat 2 Ausprägungen:

Die internal Errors kommen wenn ich auf eine Test.DBF zugreife, die 1 GB groß ist, etwas über 650.000 Datensätze.
Wenn ich die kleine nehme, kann ich sie OHNE where einlesen, mit WHERE hard codiert schränkt er auch ein (Suchbegriff IST case sensitive).
Es ist mir aber nicht gelungen (egal wie ich es versucht habe) mit Variablen Treffer zu erzielen.
Gruß
Hubert
Antworten