Habi Geschrieben 13. Oktober 2003 Geschrieben 13. Oktober 2003 Hallo zusammen, folgendes Problem. Ich habe eine Excel datei mit 4 Spalten und ca. 2000 Zeilen. Wenn ich jetzt mit untenstehendem Proggi auf das ExcelSheet per JDBC-ODBC-Bridge zugreife, dann bekomme ich ab dem Eintag der in der 858. Zeile null-Werte zurück. Keine Ahnung woran es liegt. import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; /** * @author T.Haberkern */ public class PhpArrayCreator { public PhpArrayCreator() { dbLogin(); String strTableName = ""; String strProductName = ""; for (int nIndex = 0; nIndex < 3; nIndex++) { switch (nIndex) { case 0: strTableName = "Kombi3Plus"; strProductName = "Kombi-3-plus"; break; case 1: strTableName = "Kombi2Plus"; strProductName = "Kombi-2-plus"; break; case 2: strTableName = "KombiF2"; strProductName = "Kombi-F-II"; break; case 3: strTableName = "VerafixCool"; strProductName = "Verafix-Cool"; break; } String strLastDn = "0"; boolean bFirstTime = true; System.out.println("$"+strTableName+" = array("); try { String strSqlStatement = "SELECT DISTINCT * FROM [tblvalvesizing$] WHERE Productname='"+strProductName+"' ORDER BY DN"; ResultSet rsData = m_objStatement.executeQuery(strSqlStatement); while (rsData.next()) { String strDn = rsData.getString(2); if (null != strDn) { if (strLastDn.compareToIgnoreCase(strDn) != 0) { if (false == bFirstTime) { System.out.println("\t),"); } bFirstTime = false; System.out.println("\t\""+strDn+" => array("); strLastDn = strDn; } String strPre = rsData.getString(3); strPre = strPre.replace(',', '.'); String strKv = rsData.getString(4); strKv = strKv.replace(',', '.'); System.out.println("\t\tarray(\""+strKv+"\", \""+strPre+"\"),"); } } } catch (Exception e) { e.printStackTrace(); } System.out.println("\t)"); System.out.println(");"); System.out.println(""); } } public boolean dbLogin() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Properties connInfo = new Properties(); connInfo.put("user", user); connInfo.put("password", password); this.m_objConnection = DriverManager.getConnection(dbUrl, connInfo); this.m_objStatement = this.m_objConnection.createStatement(); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } public static void main(String[] args) { PhpArrayCreator runMainApp = new PhpArrayCreator(); } private String dbUrl = "jdbc:odbc:MNG"; private String user = ""; private String password = ""; private Connection m_objConnection; private Statement m_objStatement; } [/PHP] Zitieren
Jaraz Geschrieben 13. Oktober 2003 Geschrieben 13. Oktober 2003 Hi, was steht in den Zeilen 857-859. Läuft das ganze ohne DISTINCT durch? Gruß Jaraz Zitieren
Habi Geschrieben 13. Oktober 2003 Autor Geschrieben 13. Oktober 2003 Also in den Zeilen 857-.. steht nix aussergewöhnliches. Spielt auch keine Rolle ob ich die Lösch. Die "neuen" Zeilen 858 usw. haben dann das gleiche Problem. Und das weglassen des DISTINCTS bringt auch keine Besserung. :confused: Zitieren
Habi Geschrieben 13. Oktober 2003 Autor Geschrieben 13. Oktober 2003 BTW: Wer die Excel Datei zum Ausprobieren haben möchte: http://www.emedia.office.de/temp/Mastertable.xls Als ODBC Name habe ich MNG verwendet Zitieren
Jaraz Geschrieben 13. Oktober 2003 Geschrieben 13. Oktober 2003 Hm, und was passiert wenn du in den ersten 800 Zeilen ein paar Zellen mit mehr Daten füllst, verschiebt sich dann der Abbruch? Dann ist es irgendein internes Buffer Problem. Der JdbcOdbcDriver ist allgemein nicht der stabilste. Du kannst dir auch mal POI anschauen: http://jakarta.apache.org/poi/index.html Die haben eine HSSF Schnittstelle zu Excel. Gruß Jaraz Der volle Name von HSSF ist übrigens ganz nett. Zitieren
Krain Geschrieben 14. Oktober 2003 Geschrieben 14. Oktober 2003 Wie lautet der denn? Ich hab zwar noch nicht intensiv gesucht - aber auf die schnelle hab ich das jetzt nicht gefunden. Zitieren
Habi Geschrieben 14. Oktober 2003 Autor Geschrieben 14. Oktober 2003 Heißt soviel wie: Horrible Spread Sheet Format. :-) Aber POI hilft mir nicht, weil ich da die Selektion der Dataen selbst vornehmen muss (siehe die Querys in meinem Beispiel) Zitieren
Jaraz Geschrieben 14. Oktober 2003 Geschrieben 14. Oktober 2003 Original geschrieben von Habi Aber POI hilft mir nicht, weil ich da die Selektion der Dataen selbst vornehmen muss (siehe die Querys in meinem Beispiel) Nun ja, wenn es bei 2000 Datensätzen oder <10000 bleibt, würde ich alles einlesen und mit Java bearbeiten. Du könntest aber bei mehr Datensätzen auch alles z.B. in eine hsqldb einlesen und dann damit arbeiten. Ist alles besser als mit ODBC auf Excel zuzugreifen. *mich schauderts alleine bei dem Gedanken* Gruß Jaraz Zitieren
Habi Geschrieben 14. Oktober 2003 Autor Geschrieben 14. Oktober 2003 Original geschrieben von Jaraz Ist alles besser als mit ODBC auf Excel zuzugreifen. *mich schauderts alleine bei dem Gedanken* Prinzipiell schon richtig. Ich würde ja nieeee auf Excel zurückgreifen, wenns nicht die einfachste Lösung wäre Das ganze Proggi wird allerdings nur 2-3 mal im Jahr ausgeführt. Die Daten werden immer als Excel File geliefert (vom Kunde). Das Progggi wandelt diese Daten nur in PHP-Arrays um (siehe Programm). Da möchte ich eigentlich nicht den wahnsinns-Aufwand treiben Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.