AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler "Ungültige Pufferlänge" bei TADOTable.Post
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler "Ungültige Pufferlänge" bei TADOTable.Post

Ein Thema von Codehunter · begonnen am 20. Feb 2013 · letzter Beitrag vom 21. Feb 2013
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 10:36
Datenbank: Excel • Version: 2003 • Zugriff über: ODBC/ADO
Hallo!

Ich habe zwei Excel-Dateien (XLS). Für beide habe ich mir in der ODBC-Verwaltung je einen Benutzer-DSN angelegt. In meinem Projekt habe ich für jede der beiden DSN eine ADOConnection, eine ADOTable, eine DataSource und ein DBGrid angelegt. Die ADOConnections sind auf ihren jeweiligen DSN konfiguriert, alles ist mit einander verbunden und Connected bzw. Active sind jeweils TRUE.

Die beiden Grids zeigen auch richtigerweise alle Daten aus den beiden Excel-Tabellen an. Ich kann auch per ADOTable.First/Next durch die Datenmenge navigieren, die Datenmenge per .Edit in den Schreibmodus versetzen und per AsInteger:= einen Wert zuweisen.

Nur wenn ich dann nach dem jeweiligen AsInteger:= ein ADOTable.Post durchführe, erhalte ich eine Fehlermeldung vom ODBC-Excel-Driver (siehe Anhang)

Wo mache ich da jetzt den Fehler?

Grüße
Cody
Miniaturansicht angehängter Grafiken
image1.png  
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 11:01
Der ODBC-Treiber von Excel hat deutliche Schwachpunkte; schlieslich ist er aus heutiger Sicht auch schon "steinalt".
Man sollte eher den OLE-DB Provider benützen. Hier der Connectionstring:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls; Extended Properties="Excel 8.0;HDR=Yes;IMEX=0"
Das HDR=YES bedeutet, dass die 1. Zeile die Feldnamen enthält.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 11:22
Danke, das hat schon mal sehr viel gebracht. Meine Routine läuft jetzt schon mal eine ganze Weile und aktualisiert dann auch diverse Datensätze. Wenn Excel (Das Programm) gleichzeitig offen ist kann ich die Aktualisierungen sozusagen auch "live" sehen, wenn auch nur seeeehr langsam.

Nach 509 Datensätzen bricht die ganze Routine dann mit einer weiteren Fehlermeldung ab (siehe Anhang). Der Datensatz bei dem meine Routine aussteigt unterscheidet sich inhaltlich nicht von den Datensätzen die vorher problemlos verarbeitet wurden.
Miniaturansicht angehängter Grafiken
image2.png  
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (20. Feb 2013 um 11:25 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 12:02
Der Datensatz bei dem meine Routine aussteigt unterscheidet sich inhaltlich nicht von den Datensätzen die vorher problemlos verarbeitet wurden.
Nun, er sollte sich aber mindestens über einen Schlüsselwert unterscheiden. Was man bei Excel sieht, was tatsächlich drinsteht, wie es vom Treiber interpretiert wird, sind leider sehr unterschiedliche Dinge. Dafür gibt es halt im Normalfall Datenbanken, Excel ist keine und Du wirst immer solchen Problemen nachjagen. Je mehr Benutzer in den Daten editieren, desto mehr solcher Probleme.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 12:45
Ich würde Excel direkt über die Automatisierungsschnittstelle von Excel bedienen oder über eine native Excel Read/Write-Komponente.
Über OLE DB handelt man sich eigentlich nur Probleme ein auch wenn es so schön aussieht.

Auch ist der Provider "Microsoft.Jet.OLEDB.4.0" veraltet und wird irgendwann nicht mehr bei der Standardauslieferung dabei sein (Im Embedded-Umfeld ist er schon öfters nich mehr vorhanden)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von blondervolker
blondervolker

Registriert seit: 14. Sep 2010
Ort: Bei: Leeeiipzzhhh
381 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 16:49
Und Access 2007 oder 2010?
Nutze ich auch und geht gut.
www.bewerbungsmaker.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 20. Feb 2013, 18:13
Und Access 2007 oder 2010?
Hat aber einen anderen Provider (Provider=Microsoft.ACE.OLEDB.12.0) und ist nur drauf wenn man auch Access installiert hat.
Und eine Lösung zu implementieren die auf andere MS-Anwendungen (und damit extra Lizenzkosten verursacht) angewiesen ist, ist m. E. ungünstig.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 21. Feb 2013, 11:06
Erstmal danke soweit für eure Antworten. Das Indexproblem hat sich dann recht einfach lösen lassen indem ich eine Spalte in der Tabelle angelegt habe und jede Zeile per "=Zeile()" zugewiesen habe (im Excel-Programm). Diese Spalte habe ich dann bei TADOTable.MasterFields angegeben, brachte aber keinen Mehrwert. Scheinbar bastelt sich der ODBC-Treiber den Tabellenindex selbst zurecht solange er irgendwas finden kann was die Zeilen/Datensätze eindeutig macht. Mit der numerierten Spalte war jedenfalls der besagte zweite Fehler auch weg.

Nur um keine Missverständnisse aufkommen zu lassen: Ich baue keine Produktivprojekte mit Excel. Eigentlich hasse ich den Kram wie die Pest. Ich habe aber Vorgesetzte hat die Stein und Bein darauf schwören und jeglichen Datenaustausch per Excel praktizieren und keine Lust, Zahlenkolonnen händisch einzuklimpern. Drum schreib ich mir eben einen kleinen Konverter zwischen meiner SQL-Datenbank und der Vorgabeliste aus der Chefetage. Ich hab die Daten dann in Sekunden wo andernfalls zwei Sekretärinnen jeweils 3 Tage dran sitzen.

Was ist Excel eigentlich nun genau? Weder eine Datenbank noch ein Schreibprogramm, sondern irgendwas dazwischen. Quasi eine Chimäre oder ein Bastard. Selbst Access, wollte vielleicht mal eine Datenbank werden und ist auf halbem Wege stecken geblieben.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 21. Feb 2013, 11:35
Excel ist eine Tabellenkalkulation(ssoftware). Was immer das nun heißt.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Fehler "Ungültige Pufferlänge" bei TADOTable.Post

  Alt 21. Feb 2013, 12:29
Jo für mich stellt sich da die Frage: Wurde die Software erschaffen um die Anforderung "Tabellenkalkulation" zu erfüllen oder wurde das Wort erschaffen um ein sinnfreies Programm zu beschreiben?

Genauso könnte man es "Zahlenschubsdingsbums" nennen. Es gibt ja Leute, die benutzen es zum Layouten von komplexen Formularen. Ich habe sogar schon Schülerzeitungen gesehen die Excel als DTP-Programm einsetzten.

Der Grund, warum ich mit Excel nicht warm werde, lässt sich exemplarisch an der Funktion bzw. dem Button "Zellen verbinden" herleiten: Wäre Excel spaltenorientiert, dann dürfte man sowas gar nicht machen können. Es gibt auch lustige Berechnungsfunktionen, die zellenorientiert arbeiten. Verbindet man aber Zellen, auf die sich andere Zellen per Formel beziehen, dann gibts Datensalat. Also ist es auch nicht unbedingt Zellenorientiert.

Fazit: Excel ist eine Datenbank für Leute die nicht wissen was eine Datenbank ist. Excel ist ein DTP-Programm für Leute, die mit großen DTP-Programmen nicht klar kommen. Und Excel ist ein Schreibprogramm, die damit angeben wollen dass ihnen Word nicht ausreichen täte.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz