![]() |
Datenbank: Access • Version: 00 • Zugriff über: ADO
Zugrif Access über ADO schreiben in Tabelle
Hallo,
ich steh aufn Schlauch Ich hab eine Tabelle, die nicht von mir ist. Darin möchte ich Daten schreiben. Das auslesen klappt, nur wenn ich einen Datensatz rein schreiben will bekomm ich eine Fehlermeldung. Fehlermeldung: Ein Parameterobjekt ist nicht ordnungsgemäß definirt. Inkonsistente oder unvollständige Informationen wurden angegeben. Ich hab aber keine Ahnung was die Fehlermeldung mir sagen will. hier mal mein Code zum schreiben der Daten
Delphi-Quellcode:
Bitte echte Hinweise und keine Links quer durchs Forum. Ich les jetzt schon den ganzen Tag zeugs was ich gegoogelt und in der Forenhilfe gefunden hab aber irgendwie find ich keine Lösung.
procedure TOfenoption.Insert_Database(Profil: TProfildaten);
var a:String; begin a:='INSERT INTO RegistrationNumber(Barcode,Cbs1L1Set,Cbs1L2Set,,Cbs2L1Set,Cbs2L2Set,'+ 'CreationDate,CreationName,CreationPWLevel,CreationTime,I_Ready,'+ 'Intfc_ArrivedPulses_L1,Intfc_ArrivedPulses_L2,Intfc_GivenPulses_L1,'+ 'Intfc_GivenPulses_L2,Intfc_PcbDelayOff_L1,Intfc_PcbDelayOff_L2,'+ 'Intfc_PcbDelayOn_L1,Intfc_PcbDelayOn_L2,L_PrimaerIndex,ModificationDate,'+ 'ModificationName,ModificationPWLevel,ModificationTime,PBC_Length_1,'+ 'PBC_Length_2,'+ 'PcbJamPulses_L1,PcbJamPulses_L2,PcbL1Set,PcbL2Set,'+ 'PcbLength,Recipe,RegistrationNumber'+ ')'+ 'VALUES('+Profil.Barcode+','+profil.Cbs1L1Set+','+profil.Cbs1L2Set+','+profil.Cbs2L1Set+','+profil.Cbs2L2Set+','+ Profil.CreationDate+','+Profil.CreationName+','+Profil.CreationPWLevel+','+Profil.CreationTime+','+Profil.I_Ready+','+ Profil.Intfc_ArrivedPulses_L1+','+Profil.Intfc_ArrivedPulses_L2+','+Profil.Intfc_GivenPulses_L1+','+ Profil.Intfc_GivenPulses_L2+','+Profil.Intfc_PcbDelayOff_L1+','+profil.Intfc_PcbDelayOff_L2+','+ Profil.Intfc_PcbDelayOn_L1+','+Profil.Intfc_PcbDelayOn_L2+','+Profil.L_PrimaerIndex+','+profil.ModificationDate+','+ Profil.ModificationName+','+Profil.ModificationPWLevel+','+Profil.ModificationTime+','+Profil.PBC_Length_1+','+ Profil.PBC_Length_2+','+ Profil.PcbJamPulses_L1+','+Profil.PcbJamPulses_L2+','+Profil.PcbL1Set+','+Profil.PcbL2Set+','+ Profil.PcbLength+','+Profil.Recipe+','+Profil.RegistrationNumber+')'; ADOQuery1.SQL.Text:=a; ADOQuery1.execsql; timer1.Enabled:=true; end; |
AW: Zugrif Access über ADO schreiben in Tabelle
Das ist idR ein Datenproblem oder ein veralteter Treiber oder ein Konflikt mit irgendwelchen Constraints oder alles.
Prüfe den eingesetzten Treiber auf Aktualität. Im Bereich MS / MS Access gibt es evtl. mehrere Möglichkeiten. Es doch OLEDB oder? Weiter kannst Du die problematische Stelle am besten per Ausschluss finden. Eine Hälfte der Felder weglassen und versuchen, geht?, dann andere Hälfe usw. Gerne tritt der Fehler z.B. bei "ungültigen" Datumsangaben auf "1.4.0033" usw. |
AW: Zugrif Access über ADO schreiben in Tabelle
Das heist ich soll erstmal prüfen welche Datentypen hinter der Tabelle stecken falls da was fieses rein gebaut wurde wo ich jetzt mit dem falschen Datentyp ran gehe?
|
AW: Zugrif Access über ADO schreiben in Tabelle
Wahrscheinlich fehlen die Anführungszeichen für Stringwerte. Am Besten hier mit Parametern arbeiten.
|
AW: Zugrif Access über ADO schreiben in Tabelle
Also so geht's nicht
Delphi-Quellcode:
oder hab ich da jetzt was falsch verstanden.
'VALUES("'+Profil.Barcode+'","'+profil.Cbs1L1Set+'","'+profil.Cbs1L2Set+'","'+profil.Cbs2L1Set+'","'+profil.Cbs2L2Set+'","'+
Profil.CreationDate+'","'+Profil.CreationName+'","'+Profil.CreationPWLevel+'","'+Profil.CreationTime+'","'+Profil.I_Ready+'","'+ Profil.Intfc_ArrivedPulses_L1+'","'+Profil.Intfc_ArrivedPulses_L2+'","'+Profil.Intfc_GivenPulses_L1+'","'+ Profil.Intfc_GivenPulses_L2+'","'+Profil.Intfc_PcbDelayOff_L1+'","'+profil.Intfc_PcbDelayOff_L2+'","'+ Profil.Intfc_PcbDelayOn_L1+'","'+Profil.Intfc_PcbDelayOn_L2+'","'+Profil.L_PrimaerIndex+'","'+profil.ModificationDate+'","'+ Profil.ModificationName+'","'+Profil.ModificationPWLevel+'","'+Profil.ModificationTime+'","'+Profil.PBC_Length_1+'","'+ Profil.PBC_Length_2+'","'+ Profil.PcbJamPulses_L1+'","'+Profil.PcbJamPulses_L2+'","'+Profil.PcbL1Set+'","'+Profil.PcbL2Set+'","'+ Profil.PcbLength+'","'+Profil.Recipe+'","'+Profil.RegistrationNumber+'")'; Allerdings ändert sich die Fehlermeldung in: Syntaxfehler in der INSERT INTO-Anweisung. Das mit den Anführungszeichen bei Stringwerten kenn ich aus den SQLite. Dachte bei Access -ADO brauch ich die nicht. |
AW: Zugrif Access über ADO schreiben in Tabelle
benötige ich hier etwa
QuotedStr ?? |
AW: Zugrif Access über ADO schreiben in Tabelle
Delphi-Quellcode:
so in der Art.
'VALUES(:Barcode, :Cbs1L1Set ....'
Ado.ParamBaName('Barcode).AsIrgendwas := Irgendwas; |
AW: Zugrif Access über ADO schreiben in Tabelle
Ws kommt ja drauf an, was das für ein Feld ist, bei Strings brauchst du halt Quotes. Ob nun per Hand rein gemacht oder per QuotedStr ist ja egal. Bei z.B. Numerischen Feldern brauchst du das nicht.
Am saubersten ist es aber wohl, wenn du Parameter verwendest.
Delphi-Quellcode:
'VALUES(:Barcode,:Cbs1L1Set,...'
ADOQuery1.Parameter.paramValues['Barcode'] := Profel.Barcode; ADOQuery1.Parameter.paramValues['Cbs1L1Set'] := Profil.Cbs1L1Set; ... |
AW: Zugrif Access über ADO schreiben in Tabelle
In der ersten Zeile deiner Anweisung stehen zwei Komma hintereinander.
Testweise kannst du die Anfrage ja mal direkt in der Access-DB ausführen, da gibt es meist ausführlichere Fehlerbeschreibung. |
AW: Zugrif Access über ADO schreiben in Tabelle
Nicht zu vergessen, das "CreationDate". Ist das ein DateTime-Feld? oder ein String?
Je nachdem gibt es unterschiedliche Wege den Wert an die DB zu übergeben. Gruß K-H |
AW: Zugrif Access über ADO schreiben in Tabelle
also das mit den zwei Komma hab ich echt nicht gesehen und hat wohl den Fehler geworfen.
jetzt bekomm ich aber eine neue Fehlermeldung :cry: Datentypen in Kriterienausdruck unverträglich. Ist das jetzt ein hinweis auf falschen Datentyp? Da die Tabelle nicht von mir selber erstellt ist und ich dazu keine Doku habe kenne ich die Felder nicht. Kann ich irgendwie abfragen wie die Felder aufgebaut sind? also welche Datentypen erwartet werden? |
AW: Zugrif Access über ADO schreiben in Tabelle
Zitat:
Wie wäre es die Tabelle in Access zu öffnen? Dann kannst Du auch erfahren welche Datentypen die einzelnen Felder haben. Gruß K-H |
AW: Zugrif Access über ADO schreiben in Tabelle
ja schön wenn ich ein Access hier hätte....
ich bin nur der doofie der irgendwie auf die Tabelle soll um ein paar Werte einzutragen O-Ton Cheffe: "Das bekommst du schon hin - nur ein paar Werte das kann ja nicht so schwer sein". naja - quäl - gut das ich mich mit Ado und Access noch nie beschäftigt habe. |
AW: Zugrif Access über ADO schreiben in Tabelle
Zitat:
Versuch mal diese Query zu öffnen, damit kann man angeblich die Struktur auslesen:
Code:
hier kommt das her
SELECT MSysObjects.Name, msysobjects.datecreate, msysobjects.dateupdate, GetTableDescr([Name]) AS Description
FROM MSysObjects WHERE (((MSysObjects.Name) Not Like "~*") AND((MSysObjects.Name) Not Like "MSys*") and ((MSysObjects.Type)=1)); ![]() Dann hast Du eine Chance, es richtig zu machen. |
AW: Zugrif Access über ADO schreiben in Tabelle
Zitat:
![]() |
AW: Zugrif Access über ADO schreiben in Tabelle
Zitat:
|
AW: Zugrif Access über ADO schreiben in Tabelle
Wenn Du schon aune funktionierende ADO-Abfrage hast, dann könntest Du hiermit die Feldtypen auslesen:
Delphi-Quellcode:
Gruß
for i:=0 to q.Fieldcount-1 do begin
fname:=q.fields[i].Fieldname; case q.Fields[i].Datatype of ftUnknown : Ftyp:=' Unknown or undetermined'; ftString : ftyp:=' Character or string field'; ftSmallint : ftyp:=' 16-bit integer field '; ftInteger : ftyp:=' 32-bit integer field '; ftWord : ftyp:=' 16-bit unsigned integer field'; ftBoolean : ftyp:=' Boolean field '; ftFloat : ftyp:=' Floating-point numeric field'; ftCurrency : ftyp:=' Money field '; ftBCD : ftyp:=' Binary-Coded Decimal field'; ftDate : ftyp:=' Date field '; ftTime : ftyp:=' Time field '; ftDateTime : ftyp:=' lDate and time field '; ftBytes : ftyp:=' Fixed number of bytes (binary storage)'; ftVarBytes : ftyp:=' Variable number of bytes (binary storage)'; ftAutoInc : ftyp:=' Auto-incrementing 32-bit integer counter field'; ftBlob : ftyp:=' Binary Large OBject field'; ftMemo : ftyp:=' Text memo field '; ftGraphic : ftyp:=' Bitmap field '; ftFmtMemo : ftyp:=' Formatted text memo field'; ftParadoxOle: ftyp:=' Paradox OLE field'; ftDBaseOle : ftyp:=' dBASE OLE field '; ftTypedBinary:ftyp:=' Typed binary field'; ftCursor : ftyp:=' Output cursor from an Oracle stored procedure (TParam only)'; ftFixedChar : ftyp:=' Fixed character field '; ftWideString: ftyp:=' Wide string field '; ftLargeInt : ftyp:=' Large integer field '; ftADT : ftyp:=' Abstract Data Type field'; ftArray : ftyp:=' Array field '; ftReference : ftyp:=' REF field '; ftDataSet : ftyp:=' DataSet field '; ftOraBlob : ftyp:=' BLOB fields in Oracle 8 tables'; ftOraClob : ftyp:=' CLOB fields in Oracle 8 tables '; ftVariant : ftyp:=' Data of unknown or undetermined type'; ftInterface : ftyp:=' References to interfaces (IUnknown)'; ftIDispatch : ftyp:=' References to IDispatch interfaces '; ftGuid : ftyp:=' globally unique identifier (GUID) values '; else ftyp:='!not known!'; end;{case---------------------------------} K-H |
AW: Zugrif Access über ADO schreiben in Tabelle
Hi,
hab rausgefunden das ein Wert als Zahl übergeben werden muss, dann geht's. :roll: Danke an euch. Es wird jetzt ein Eintrag erstellt, dann bekomm ich aber erneut eine Fehlermeldung ADOQuery1: CommandText gibt keine Ergebnismenge zurück. Der Eintrag an sich wird in der Datenbank aber erstellt. Gruß Matthias PS:Phantasie darf man natürlich erwarten - ihr glaubt ja gar nicht wie viel Phantasie ich haben kann :evil: |
AW: Zugrif Access über ADO schreiben in Tabelle
Wahrscheinlich machst du ein Open statt einem ExecSQL.
|
AW: Zugrif Access über ADO schreiben in Tabelle
nö, mach brav ein execsql
|
AW: Zugrif Access über ADO schreiben in Tabelle
Ich schließ jetzt einfach die Datenbank nachm schreiben und mach die Verbindung neu dann geht's ohne Fehlermeldung.
|
AW: Zugrif Access über ADO schreiben in Tabelle
Vielleicht setzt Active auf true, das wäre dann das gleiche wie Open.
|
AW: Zugrif Access über ADO schreiben in Tabelle
ja das wars, Dankeschön.
Das Query stand noch auf active. Danke an euch allen habt mir sehr geholfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz