Entwickler-Ecke

Datenbanken - Kann mdb nicht öffnen! Parameter hat keinen Standartwert o.0


LowSkills - Mi 18.07.07 19:20
Titel: Kann mdb nicht öffnen! Parameter hat keinen Standartwert o.0
Ich habe seit geraumer Zeit den Fehler bekommen, dass ein Parameter keinen Standartwert hätte. Aber: Von vorne.

Ich habe eine Tabelle und die widerum hat ne Menge Felder mit allen möglichen Inhalten.
Das neueste Feld ist ein Feld, in dem lediglich ein nummerischer Wert drinsteht: 0, 1 oder 2. Im Moment steht überall ne Null drin. Das ist auch gut so.
Jetzt übergebe ich die SQL-Strings und sage dann "bitte db öffnen und ausführen". Dann schmiert das prog ab mit der Meldung:
"Parameter'[T1001 - Verlag].[PL-IX - ID Anrede zum ASP]' hat keinen Standartwert. [...]"

Ich hab echt null Peilung, was da jetzt wieder im argen ist. Es steht doch überall ein wert drin...

Der Felddatentyp in Access ist als "Zahl" angegeben, Feldgröße als "Integer", der definierte Standartwert ist "0".

Blick einer von euch durch oder hat schon mal ein ähnliches Prob gehabt?
Vielen Dank für Eure Hilfe!


ene - Do 19.07.07 06:56

Hi,

händisch bekommst du sie noch auf? Dann wäre der Code von Interesse.


LowSkills - Do 19.07.07 08:37

wie meinen? o.0?


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure HändischVerstehen(Sender: TObject);
var Händisch : string;
  begin
    Händisch = 'von Hand';
  end;


Also der Code ist folgender:
(Auszug)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
 If FileExists(GetSpecialFolder($26)+'\Power Tools\SQL\relevantVLG.dat'Then  
    begin  
      try  
        Datenaustausch.ADOQuery.Close;  
        Datenaustausch.AdoQuery.SQL.Clear;  
        Datenaustausch.ADOQuery.SQL.LoadFromFile(GetSpecialFolder($26)+'\Power Tools\SQL\relevantVLG.dat');  
        Datenaustausch.ADOQuery.Open;
        //beim Open schmiert er ab

        Datenaustausch.ADOQuery.ExecSQL;  
        Verlagsanzahl:=Datenaustausch.ADOQuery.RecordCount;  
        SENDINGSTATS.MM_LogDatei.Lines.Clear;  
        Datenaustausch.ADOQuery.First;  
          For i:=0 to Datenaustausch.ADOQuery.RecordCount do  
            begin  
              Feldinhalt:=Datenaustausch.ADOQuery.FieldValues['Code Verlag'];  
              SENDINGSTATS.MM_LogDatei.Lines[i]:=Feldinhalt;  
              Datenaustausch.ADOQuery.Next;  
            end;  
          Datenaustausch.ADOQuery.Close;  
          SENDINGSTATS.MM_LogDatei.Lines.SaveToFile(GetSpecialFolder($26)+'\Power Tools\Temporary\relevanteVLGs.dat');  
      except  
        SENDINGSTATS.RichEdit_SENDINGSTATS.Lines.Add('Ein Fehler ist bei der Ermittlung aller VLG mit Anzahl TB > 0 aufgetreten...');  
        FailedRequest_close;  
      end;


Nur zur Info: Die SQL-Anweisungen sind korrekt und fehlerfrei, dass hat das hat Access mir nähmlich aufgrund meiner gewählten Parameter so zusammengewürfelt.

Hoffe, dass hilft weiter, wenngleich ich auch wenig Hoffnung hege...

Danke schonmal!


Agawain - Do 19.07.07 09:32

Da


Delphi-Quelltext
1:
 For i:=0 to Datenaustausch.ADOQuery.RecordCount do                    


das geht schon mal nicht, weil Du die Schleife einmal mehr durchläufst, als gut ist :wink:


Delphi-Quelltext
1:
 For i:=0 to Datenaustausch.ADOQuery.RecordCount - 1 do                    


Gruß

Aga


ene - Do 19.07.07 09:38

Wie sieht denn der SQL-String aus? Baust du eine Connection vorher auf?

Und händisch:= DoppelklickAufDB.mdb


LowSkills - Do 19.07.07 10:04

user profile iconene hat folgendes geschrieben:
Wie sieht denn der SQL-String aus? Baust du eine Connection vorher auf?


Zu Connection vorher Aufbauen:
Ja und Nein.
Ich benutze die Selbe AdoConnection für zig Abfragen und Routinen, also wird und wurde Sie vor dem Punkt an dem es hakt schon mehrfach geöffnet, wieder geschlossen, neue SQL Tags rein, wieder öffnen und so. Zum Zeitpunkt der kritischen Abfrage ist Sie geschlossen, daher auch der Open-Tag, wo es hakt.

Den SQL-String kann ich dir jetzt nicht eins zu eins widergeben, der ist nämlich bei mir zu Hause auf dem Rechner, aber sinngemäß steht folgendes drin:


SQL-Anweisung
1:
2:
SELECT DISTINCTROW [...],[T1001 - Verlag].[PL-IX - ID zum ASP],...
FROM [T1001 - Verlag];


Ich bin mittlerweile echt dizzy. Hab wie gesagt leider kein delphi auf der Arbeit.

@Agawain:
Irgendwie hatte ich soetwas schon erwartet. Ja ja, die lieben Schleifen. Werd mich da dann später drum kümmern. Ich mag delphi... :)


OlafSt - Do 19.07.07 10:21

Meist deutet der Fehler darauf hin, das man im Query ein DB-Feld anspricht, das es in der Tabelle nicht gibt. 99% der Fälle sind Tippfehler, der Rest ist "vergessen, das gelöschte Feld auch im Query zu entfernen"...


LowSkills - Do 19.07.07 10:28

Das würde einiges erklären. Ich habe die aktuelle db erst seit ein paar tagen. Davor habe ich bereits vorab "ins blaue" programmiert. Bei den Tests mit der "alten" db gab es eben dieses Feld noch nicht. Der Fehler kam da schon im selben wortlaut. Jetzt gibt es dieses Feld allerdings und ich kann mir nur schwer vorstellen, einen Fehler in der SQL-Anweisung drinzuhaben. Wie gesagt, die Abfrage wurde mit Access zusammengebastelt, ich habe einfach das was in der SQL-Ansicht drinne steht rauskopiert und damit sollte delphi (wie gehabt) problemlos arbeiten können. Ich werd es dennoch überprüfen. Ihr könnt euch ja derweil gedanken machen, ob es tatsächlich auch ein anderer Fehler sein könnte. Melde mich dann in ner viertel Stunde zurück.

:mrgreen:

bis gleich....


LowSkills - Do 19.07.07 12:11

Überprüfung abgeschlossen. Leider muss ich folgendes verlauten lassen:

Die Zeichenfolgen sind Absolut identisch. Es handelt sich also dabei definitiv nicht um einen schreibfehler. Jemand noch ne Idee?

:autsch:

Danke...


OlafSt - Do 19.07.07 12:30

Dann würde ich jetzt das SQL-Statement genauer beäugen. Unter Umständen wird da in anderen Tabellen auf fehlende Felder zugegriffen, oder es werden DB-Felder umbenannt und dann nicht mehr korrekt angesprochen etcpp.

Im Delphi-Code ist IMHO der Fehler nicht zu suchen. An einem "Open" kann man nicht viel falsch machen.


LowSkills - Do 19.07.07 12:53

werd mich gleich mal zur Beratung mit dem Für die Tabellen verantwortlichen zur Beratung zurückziehen. Sobald ich die Heiligen Hallen der Systemadministration verlassen habe und ggf. Klüger geworden bin, werde ich euch etwaige Schritte in die Richtige oder auch falsche Richtung wissen lassen...
Also in diesem Sinne schonmal vorab danke für eure Hilfe.

Bis später dann.

tschuhuss! :mrgreen: