![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Senior Member
![]() Registriert seit: 21.10.2002
Beiträge: 163
|
![]() hi! hab ein sehr vereinfachtes beispielprogramm im anhang, wo ihr das ganze testen könnt!
ausführen über den button oben in der menüleiste! mein problem: wenn ihr das excel file aufmacht, dann könnt ihr sehen das in der spalte wo volumen steht in der 3. zeile mit daten, eine zahl steht.. diese wird jedoch nicht korrekt importiert mit dem recordset! das tritt jedoch nur auf, wenn als erster datensatz "#N/A ND" eingetragen ist! ich will jedoch trotzdem die zahlen darunter korrekt importieren! wenn man beim modul die werte des recordsets überwacht, dann sieht man dass bei der zahl, also beim 3. durchlauf kein wert drinnen steht! warum? wie kann ich das lösen dass ich auch die zahlen importieren kann? |
![]() |
![]() |
![]() |
#2 |
Senior Member
![]() Registriert seit: 21.10.2002
Beiträge: 163
|
![]() keiner ne ahnung warum beim ersten zahlenwert beim bsp kein wert mehr im recordset steht?
bug von excel oder access? oder gibts ne logische erklärung dafür? |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() Das Problem ist der Datentyp. Wenn in der ersten Zeile ein String steht nimmt ADO an, dass es sich auch beim Rest um Strings handelt. Wenn jetzt Excel auf einmal einen anderen Datentyp übergibt ist das natürlich übel
![]() Eine Möglichkeit wäre, die Spalte als Text zu formatieren und erst in Access eine Unterscheidung zwischen Zahlenwert und Text zu treffen. Allerdings zeigt dir dann Excel in der Spalte bei jeder Zahl einen Fehler an ("Zahl als Text gespeichert" oder so ähnlich). Stört zwar nicht wirklich, ist aber auch nicht besonders schön. Ich hab' dir jetzt ein Beispiel mit einer versteckten Spalte gemacht, in der die Inhalte der angezeigten VOLUME-Spalte gänzlich als Text wiedergegeben werden. have fun ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
![]() Registriert seit: 21.10.2002
Beiträge: 163
|
![]() thx einmal vorerst!
also das ganze wäre ne möglichkeit! jedoch muss das ganze automatisiert ablaufen.. dh ich lasse dann im fertigen "programm" den benutzer eine excel datei auswählen, und diese hat dann im groben das format was ich mitgeschickt habe.. du hast ja im lösungsvorschlag in excel selbst das ganze definiert so wie ich das sehe stimmts? gibts ne möglichkeit das ganze auch von access aus, in excel vorher so zu formatieren, dann zu importieren, und eventuell wieder zurückformatieren nach dem import? wenn das möglich ist, und du mir da ne kleine hilfestellung bzw anleitung geben kannst, wie ich das ganze von access aus in der excel datei umformatieren kann wäre das echt hilfreich! schonmal danke im voraus auch wenn du nicht weisst wie es geht bzw wenns überhaupt nicht geht.. |
![]() |
![]() |
![]() |
#5 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() Möglich ist alles
![]() Da aber viele Wege nach Rom führen gibt's eben das Problem welchen man wählen soll. Eine Möglichkeit wäre ein Export aus Excel ins CSV-Format, was ja per Automatisierung kein Problem sein dürfte. In der resutlierenden Textdatei müsste man dann noch eine kleine Änderung vornehmen indem man die hier fett markierten Teile löscht: ----------------------------------------------------- RIC;ARNT.TA;; ;;; available fields;DATE,CLOSE,OPEN,HIGH,LOW,VOLUME;; fields;DATE;CLOSE;VOLUME data;26.09.2002;8,9;#N/A ND ;25.09.2002;8,9;#N/A ND ;24.09.2002;8,9;46 ;23.09.2002;8,9;327 ;22.09.2002;8,9;#N/A ND ;21.09.2002;#N/A ND;#N/A ND ;;; ;;; ;;; ;;; ;;; ----------------------------------------------------- Danach müsste ADO (wenn ich mich nicht täusche) alle Fields im Format Text übernehmen. Die Umwandlung kannst du ja dann im VB vornehmen. Die einfachste Möglichkeit wäre natürlich, die betreffende Spalte in Excel schon von Haus aus im Format 'Text' anzulegen. Du bekommst dann zwar diese kleinen grünen Dreiecke für die angeblichen Fehler angezeigt aber das dürfte zu verschmerzen sein. Du könntest auch versuchen die Connection darauf zu trimmen, das korrekte Format zu erkennen, sprich mehr Angaben zu machen (Properties). Wenn man einen Datei-DSN erstellt, dann kann man auch die Anzahl der zu scannenden Zeilen angeben. Das wirkt sich dann auch auf den erkannten Datentyp aus. Allerdings könntest du dann wahrscheinlich nie ganz sicher sein ob der Datentyp wirklich der richtige ist. Ein DSN für deine aktuelle Beispieldatei würde im Texteditor so aussehen: ----------------------------------------------------- [ODBC] DRIVER=Microsoft Excel-Treiber (*.xls) UID=admin UserCommitSync=Yes Threads=3 SafeTransactions=0 ReadOnly=1 PageTimeout=5 MaxScanRows=10 MaxBufferSize=2048 FIL=excel 8.0 DriverId=790 DefaultDir=C:\DOKUMENTE UND EINSTELLUNGEN\PFARRENT\DESKTOP\beispiel DBQ=C:\DOKUMENTE UND EINSTELLUNGEN\PFARRENT\DESKTOP\beispiel\rictest.xl s ----------------------------------------------------- Falls du mit den Vorschlägen auch nicht weiterkommst, melde dich einfach nochmal. Irgendwas wird schon passen ![]() |
![]() |
![]() |
![]() |
#6 | |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() Zitat:
![]() Das was ich da gequotet habe, hamma heute auch schon kurz probiert. (nachdem ich dein voriges Posting gelesen hab - und das Beispiel sag is mir das eingefallen) Is aber in der Kürze noch nicht rund gelaufen. Ich wollt dann versuchen, den Range über die Zellen zu ziehen und dann alle Zellen auf Text setzen - die grünen Dreicke sind egal, weil das Dokument sowieso nur im Hintergrund geöffnet wird. Nur hats mit dem Import noch nicht ganz so funktioniert - wir wissen noch nciht woran es liegt - wir werden es uns am Montag anschaun. Wer ma dann eh sehen, ob wir was zusamemnbringen oder nicht. ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
![]() Registriert seit: 21.10.2002
Beiträge: 163
|
![]() jo stimmt was der llr da sagt, und ich will noch hinzufügen, bzgl dem vorschlag von dir mit der csv datei..
das würde vielleicht ein kleines problem geben, da ich nicht hundet prozentig voraussagen kann wie die datei aussieht.. sie kann sich mal ändern und bissl anders ausehen.. fix vom format her ist: das "ric" in der selben zeile wie die titel sprich "arnt.ta" steht! dann ist noch vorgabe, das in der zeile mit fields, die attribute stehen, welche sich auch teilweise abändern können.. bei manchen gibt es ein volumen beim anderen nicht.. und in der zeile "data" fangen die daten zum einlesen an.. in der "echten" exceltestdatei, zb ist eine zeile abstand zwischen den attributen und den daten.. was es vielleicht etwas schwierig beim rauslöschen der störenden daten in der csv datei macht.. weil ich ja zb auch immer die titel brauche, und wenn ich jetzt alles in ne csv datei kopiere, und dann solche sachen rauslösche, eventuell nicht mehr unterscheiden kann welchen titel ich da jetzt hab bzw wo das ende des einen und der anfang des nächsten ist! wir probiern jetzt mal die möglichkeit das ganze in der excel datei zu ändern, und dann eventuell wieder in das ursprüngliche format zu bringen.. mal schaun was wir da reißen ![]() |
![]() |
![]() |
![]() |
#8 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() Ich nehme mal an, ihr habt in einer bestehenden Excel-Datei eine Spalte mit Zahlen einfach auf Text umformatiert. Das allein genügt aber noch nicht. In diesem Fall müsste man noch vor die Zahl ein Hochkomma ' schreiben. Nur wenn die Zelle schon beim Eintragen der Zahl das Format Text besitzt wird die Zahl auch automatisch als Text behandelt.
Es würde also nur bei bestehenden Dateien ein Problem bestehen das sich aber mit einem einfachen Makro aus der Welt schaffen ließe. Ich habe übrigens herausgefunden, dass man die angezeigten Fehlerwarnungen auch ausblenden kann. (Extras/Optionen/Fehlerüberprüfung) |
![]() |
![]() |
![]() |
#9 | |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() Zitat:
![]() Bist dir da ganz sicher? Weil es geht darum, dass in der Excel Tabelle Daten von einem "Kunden" stehen die von Access aus importiert werden müssen. (nur falls der maxmustermann das nicht eh schon geschrieben hat ![]() Drum können wir in dem Excel Sheet händisch nix umändern - das muss das Programm machen. Aber eine Idee is mir noch als "letzter Ausweg" gekommen - das ganze "zu Fuß" über Range("A2").Formula den Wert auslesen und dann in die DB schreiben - dann ersparen wir es uns ADO auszutricksen (so mach ich das eigentlich immer wenn ich direkt in Excel ein Makro screib) |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
![]() Registriert seit: 21.10.2002
Beiträge: 163
|
![]() was aber bei einigen tausend feldern performance mäßig nicht so gut sein wird sag ich mal..
hätte dir im anhang mal die datei mitschicken wollen, wie sie dann im original aussieht, also das excel file, aber leider is es selbst mit winrar und winzip noch bissl zu groß.. naja is ja auch nicht so wichtig.. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|