Announcement

Collapse
No announcement yet.

Access 97 Datenbank mit SQL Fehlermeldung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Access 97 Datenbank mit SQL Fehlermeldung

    Hallo, wer kann mir helfen ?
    Ich habe eine Acc97 Datenbank via BDE (vorläufig bis ADO da ist) angekoppelt. Wenn ich eine Tabelle mit SQL auslesen will kommt die Fehlermeldung : Exception der Klasse EDBEngine -> Allgemeiner SQL Fehler->[Microsoft][Microsoft ODBC Access97 Driver] Too few parameters.Expected 1

    Folgende Anweisung geht : select * from tabelle
    Folgende Anweisung geht nicht : select * from tabelle where Fahrzeug='003' order by Datum. Was vorher mit einer dBase Datenbank allerding funktionierte

    Der SQlString wird an folgende Funktion übergeben:

    //************************************************** ****************************
    // Ausführen anderer SQL Select Anweisungen für Query1
    //************************************************** ****************************
    procedure execSQL(sqlstr: String;Query:TQuery);
    begin
    if Query.Active then Query.Close;
    Query.SQL.Clear;
    Query.SQL.Add(sqlstr);
    if not (Query.Prepared) then
    Query.Prepare;
    Query.ExecSQL;

    end;

    Vielen Dank
    Frank

  • #2
    Hallo Frank,

    Datum ist, glaub ich, eine Funktion im Access-SQL - deshalb der Fehler mit den Parametern. Am besten du verwendest die kompletten Bezüge beim Zugriff auf die Felder. z.B.: select * from tabelle where tabelle.Fahrzeug='003' order by tabelle.Datum. Ist zwar mehr Scheiberei aber immer sicherer. Ma kann ja für die Tabelle noch einen Alias vergeben ;-)

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,
      Du hast natürlich recht, das Feld heißt bei mir in der Tabelle genaugenommen von_datum. Ich habe es nur etwas abgekürzt.

      Die Verwendung von Like anstelle des Gleichheitszeichen führt komischerweise zu einem anderen Fehler. Ich habe die o.g. genannten SQL Strings in einem SQL Editor bei der selben Datenbank angewandt; dabei funktionierte alles. Der Code für die SQL Ausführung entspricht doch den üblichen Beispielen aus Literatur und Forenbeiträgen.

      Fran

      Comment


      • #4
        Die Variante mit Tabelle.Feld habe ich auch ausprobiert, führt aber zum gleichen Ergebnis.

        Fran

        Comment


        • #5
          Hallo Frank,

          mann sollte die Beiträge eben immer komplett lesen ;-) Du darfst natürlich für ein SQL-Statement welches eine Datenmenge zurückgibt nicht Query.ExecSQL verwenden, sondern Query.Open. ExecSQL wird bei SQL Befehlen verwendet, die keine Ergebnismenge haben, also update, delete, insert, etc.

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,
            Vielen Dank für Deinen Hinweis. Es ist mir peinlich. Ich habe versehentlich den falschen Code hineingestellt, weil ich eine zweite Routine ohne Datenmenge habe.

            procedure SelectSQL(sqlstr: String;Query:TQuery);
            begin
            if Query.Active then Query.Close;
            Query.SQL.Clear;
            Query.SQL.Add(sqlstr);
            if not (Query.Prepared) then
            Query.Prepare;

            Query.Open;
            Query.First;
            end;

            Der Fehler tritt beim Deguggen bei Open auf.

            Gruß Frank
            Gruß Fran

            Comment


            • #7
              Hallo
              folgende Anweisung funktioniert:
              Select * from DIRLOG where dirlog.gesamt_km >= 5 order by von_datum
              gesamt_km ist numerisch.
              Im obigen Beispiel ist Fahrzeug ein Textfeld, wobei die Anführungszeichen auch richtig gesetzt sind. Ich habe die Tabelle unter Access von dbase importiert.
              Es scheint als ob die SQl Ausführung das Textfeld nicht identifizieren kann.

              Fran

              Comment


              • #8
                Ist Fahrzeug tatsächlich ein Textfeld oder hat Access beim importieren ein Integer draus gemacht weil eh nur Zahlen drin standen
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Hallo
                  Problem gelöst !! Ich glaubs einfach nicht.

                  die SQl Strings für dbase : (s = Stringvariable)

                  SelectSQL('Select * from DIRLOG where Dirlog.Fzg_nr = "'+S+'" order by von_Datum',Windia_main.query1);
                  Dies wird in der Literatur so angegeben.

                  in Access97

                  SelectSQL('Select * from DIRLOG where dirlog.Fzg_nr LIKE '''+S+''' order by dirlog.von_Datum',Windia_main.query1);

                  Gruß Fran

                  Comment


                  • #10
                    Nur zur Ergänzung:

                    Es ist schon ärgerlich, wenn auf solche Unterschiede, ob doppelte Anführungszeichen oder drei einfache Anführungszeichen nirgends darauf hingewiesen wird. Like oder = machen hier keinen Unterschied.

                    Fran

                    Comment


                    • #11
                      Hallo Frank,

                      kleiner Tip: wenn du, grade für SQL-Statements, Delphivariablen in Hochkommas verpackt als String übergeben willst, dann macht sich die Funktion QuotedStr ganz gut. Damit könnte dein Bsp. so aussehen: SelectSQL('Select * from DIRLOG where dirlog.Fzg_nr LIKE '+QuotedStr(S)+' order by

                      Man verzettelt sich nicht so in '''''' ;-)

                      Gruß Fal
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment

                      Working...
                      X