Der BDE sagt: "Feld nicht gefunden", aber Feld vorhanden ist
Ich habe die folgende Abfrage, um eine meiner Datenbank-Tabellen:
select count(*) as mycount
from mytable
where fieldone = :fieldone
and fieldtwo = :fieldtwo
Parameter korrekt geladen wird in die Abfrage (beide vom Typ String).
Wenn ich diese Abfrage ausführen, die außerhalb der app (z.B. durch die dbexplore) und ersetzen Sie die Parameter mit den tatsächlichen Werten, bekomme ich das richtige Ergebnis. Aber wenn es läuft in der app, bekomme ich eine Field 'fieldtwo' not found
Fehler, direkt in die Abfrage ein.Open call.
Warum sollte die BDE nicht finden, Sie dieses Feld, wenn es tatsächlich existieren?
Update: Der folgenden Abfrage wird gestartet, unmittelbar nachdem der erste (der fehlschlägt), funktioniert in der app:
select *
from mytable
where fieldone = :fieldone
order by fieldone, fieldtwo
Sie verändert das eigentliche SQL, hast du zufällig entfernen Sie die Bestellung, indem Sie auf die erste SQL-Anweisung? Als die fieldone & fieldtwo existieren nicht in der resultierenden Aussage und das würde das problem verursachen.
Mmm... Nein, ich hatte nicht entfernen
Es ist kein problem, das "generische Szenario". SQL-Anweisung ausgeführt wird, OK. Problem ist woanders, aber die Frage nicht, geben Sie mir einen cue-wo es zu finden ist.
Mmm... Nein, ich hatte nicht entfernen
order by
- Klausel aus der ersten Anweisung. Ich habe gerade den Namen der Felder und Tabellen für die Abbildung einer generischen Szenario. Neben, es gibt keine Verwendung für eine order by
- Klausel in einer Anweisung gibt eine einzelne Aggregat-Funktion.Es ist kein problem, das "generische Szenario". SQL-Anweisung ausgeführt wird, OK. Problem ist woanders, aber die Frage nicht, geben Sie mir einen cue-wo es zu finden ist.
InformationsquelleAutor Pablo Venturino | 2011-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löschen der Abfrage-Inhalt mit
Query1.SQL.Clear;
- Anweisung, bevor Sie es öffnen.Anderen Grund kann Sie öffnen, andere Datenbank, die möglicherweise nicht über das angegebene Feld. Werden Sie sicher, dass sowohl die
DatabaseName's
in Ihre app und dbexplore sind die gleichenObwohl Sie Schloss die Abfrage, es wird nicht klar, die sql-Anweisung. So versuchen Sie, löschen Sie die Abfrage mit
clear
Anweisung nach dem schließen der AbfrageÜberprüfen, dass: beim Debuggen
Query.SQL.Text
gibt mir genau die Abfrage, die ich versuche zu führen. Ich habe versucht, das hinzufügen einerQuery.SQL.Clear
vor der Erstellung meiner Abfrage, aber ich habe immer noch den gleichen Fehler.Nach vielen tests, habe ich beschlossen, den Fehler auf meine app. Ich fand einen workaround, also ich bin keine Tests mehr. Ich nehme Ihre Antwort, da Sie die ersten waren, die zu beantworten, und folgte auf die Frage. Danke!
Ich habe ein ähnliches problem, was war die Abhilfe, die Sie gefunden haben?
InformationsquelleAutor Bharat
Die beste Vermutung ist, dass Sie aufgefüllt haben, ist die Liste der Felder in der Abfrage, dies überschreibt die Konzeption der zugrunde liegenden Felder in der Abfrage und führt zu unzähligen Verwirrungen.
Rechten Maustaste auf die Abfrage, wählen Sie den Felder-editor, löschen Sie alle Werte, die da sind, und wählen Sie dann "add all fields", sollte dazu führen, dass das fehlende Feld angezeigt, nachdem die Abfrage ausgeführt wird.
Ich denke, es sollte automatisch die Felder aufzufüllen, wenn es keine definierten Felder, wenn die Abfrage ausgeführt wird, so können Sie nicht brauchen, um wählen Sie 'add all fields" nach dem löschen der Felder.
InformationsquelleAutor Petesh
Immer, wenn wir auf ein problem stoßen, wie dieser neigen wir dazu, entfernen Sie die Abfrage aus dem Formular, und legen Sie diese zur Laufzeit dynamisch... Es hängt davon ab, wie tief verwurzelt in der form ist es...
E. g. Wenn Sie eine Daten bewusst Steuern "fieldtwo", die versucht zu Holen von Daten, wenn der zugrunde liegende Datensatz wird aktualisiert, dann löst eine Fehlermeldung wie diese, aber es ist mehr offensichtlich, wenn Sie haben code geschrieben, solche
Diese Weise fällt es mehr auf die entsprechende Zeile, anstatt die offen (auslösen einer Veranstaltung)
Ich habe ähnliche Erfahrung. Auffüllen Abfragen Laufzeit hilft in diesem Fall, es ist nicht notwendig, reservieren Sie dynamisch. Es scheint, wie Sie einige gespeicherte Prozeduren überschreiben von unabhängigen Objekten im Speicher, in diesem Fall Feld Liste der einige TQuery-Objekt.
InformationsquelleAutor James Barrass
Ich verwendet, um Gesicht porblems mit BDE-wenn ich SQLExplorer öffnen und die app greift auf die DB zur gleichen Zeit (hatte ich aber Fehler, wie ), schließen Sie den Explorer kann es helfen, wenn ich nicht bauen würde, die SQL als text, ohne die Parameter und probieren ob es dann funktioniert (wenn möglich in Ihrer situation).
InformationsquelleAutor CloudyMarble
Ich glaube nicht, verwenden Parameter, so bin ich nur greifen an Strohhalme hier. Ich benutze immer noch die BDE regelmäßig, bin aber kein Experte. Ich finde ich scheue komplexere Ausdrücke (die Ihnen nicht!) weil der kleine "überraschungen" wie diese, dass die BDE an Ihnen wirft.
Vielleicht hinzufügen Klammern:
Oder, single-oder double-quote-Zeichen (dies wird wahrscheinlich noch schlimmer machen?)
Oder zu erkunden das problem, entfernen Sie "und fieldtwo = :fieldtwo" Linie und sehen, ob es läuft.
Wäre es möglich für Sie zu tun, Ihre eigene parameter-substitution mit einem StringReplace, wie in
Was meinst du mit "Nicht mit Parameter hat nicht funktioniert." Habe eigentliche entfernen Sie die where-Anweisung, oder ändern Sie die :fieldone, um Feldnamen, oder ??? Was war das Ergebnis?
InformationsquelleAutor RobertFrank
Wenn Sie erstellen ein ClienDataSet im Speicher durch das Erstellen von Datensatz-Methode, sollten Sie in der TFieldDefs Eigenschaft, die müssen einen anderen Feld-Namen haben oder nicht erstellt
InformationsquelleAutor Martin Miguel Parody Narvaez
Hatte ich einen seltsamen aber kleines problem, ich poste, falls es jemandem helfen, in einigen Tag.
uRegPeople.pas
Hatte ich
qryPerson
sowohl infrmRegPeople
und infrmEditPerson
durch die Verwendungwith
ich war die Referenzierung vonfrmEditPerson.qryPerson
aber ich wollte Verweis auffrmRegPeople.qryPerson
. Dann muss ich ändern, um den folgenden code.InformationsquelleAutor Soon Santos