Seite 1 von 1

Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 29.04.2010 17:42
von Ingo Platte
Hallo,
ich habe mehrere Exceltabellen die ich gerne mit ADOmate bearbeiten möchte.

Der Ablauf des Codes:
Es werden alle Tabellen nach einem bestimmten Namen durchsucht und anschließend sollen die Werte geändert werden.

Der Aufbau der Tabellen:
Müller####123####456###234 ...
123 und 234 soll geändert werden
Maier####389#####32####34 ...

mit folgendene Code versuche ich das zu realisieren und
folgende Debugger-Ausgabe erhalte ich dabei:
BM$ SET F1 = '500'
Syntaxfehler in UPDATE-Anweisung. :freak:

Code: Alles auswählen

IncludePath "..\"
XIncludeFile "ADOmate.pbi"

;EnableExplicit

Define Connection, Count, i 
Define ExcelFile.s, ConnectionString.s 

ExcelFile.s = "Excelfile.xls" 

ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFile + ";Extended Properties=" + Chr(34) + "Excel 8.0" + Chr(34)
CN               = ADOmate_OpenDatabase(ConnectionString)

If CN
 
    Dim Table.s(0)
    CountTables = ADOmate_ListDatabaseTables(ConnectionString, Table()) -1
    
    
    For TableCounter = 0 To CountTables
      If ADOmate_DatabaseQuery(CN, "Select * From [" + Table(TableCounter) + "]")
  
        For ColCounter1 = 0 To ADOmate_DatabaseColumns(CN) - 1
           Fieldname.s = ADOmate_DatabaseColumnName(CN, ColCounter1)

          While ADOmate_NextDatabaseRow(CN)
           
            For ColCounter1 = 0 To ADOmate_DatabaseColumns(CN) - 1
               FieldValue.s = ADOmate_GetDatabaseString(CN, ColCounter1)
            

            If FindString(Fieldvalue, "Müller",1)
            For ColCounter2 = 0 To ADOmate_DatabaseColumns(CN) - 1
            
              Result.s = ADOmate_GetDatabaseString(CN, ColCounter2)
              
              If ValF(Result) >100 And ValF(Result) <300

                sql.s = "UPDATE " + Table(TableCounter) + " SET " +  ADOmate_DatabaseColumnName(CN, ColCounter1) + " = '1111'"
            
                Debug sql
                ADOmate_DatabaseUpdate(CN, SQL)
                Debug ADOmate_GetLastErrorDescription()
              
               EndIf
              
            Next
            Break
            
            
            EndIf
            
           Next
          Wend
    
       Next

      EndIf

    FieldValue = ""
    fieldname = ""
  Next
EndIf

ADOmate_CloseDatabase(CN)

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 30.04.2010 17:29
von Ingo Platte
Hab ich mich nicht richtig ausgedrückt? Braucht Ihr noch ein paar Daten?

Also, die Exceltabelle bekomme ich ohne Probleme ausgelesen aber ich kann die einzelnen Felder nicht
mit anderen Werten füllen.

Ich habe schon mehrere Versuche mit "Update" durchgeführt aber ohne Erfolg.
Ständige Fehlermeldung: "Syntaxfehler in UPDATE-Anweisung"

Code: Alles auswählen

sql.s = "UPDATE " + Table(TableCounter) + " SET " +  ADOmate_DatabaseColumnName(CN, ColCounter1) + " = '1111'"
ADOmate_DatabaseUpdate(CN, SQL)

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 30.04.2010 20:56
von Falko
Kopiere diesen Teil anstelle des vorhandenen Teilcodes ein und schau dir die Debugausgabe an (ein Zeichen zu viel :shock: ).
Eine Korrektur habe ich zwar gemacht, aber mit SQL kenne ich mich nicht so richtig aus. Tabelle1 wird ja gefunden, kriege aber eine Datenbankfehlermeldung angezeigt. Wenn ich den Namen der Tabelle direkt einsetze,
funktionierte es.

Code: Alles auswählen

If ValF(Result) >100 And ValF(Result) <300

               ; sql.s = " UPDATE " + Table(TableCounter) + " SET " +  ADOmate_DatabaseColumnName(CN, ColCounter1) + " = '1111'"
                sql.s = "UPDATE " + Mid(Table(TableCounter),0,Len(Table(TableCounter))-1) + " SET " +  ADOmate_DatabaseColumnName(CN, ColCounter1) + " = '1111'"
                ADOmate_DatabaseUpdate(CN, SQL)
           
                Debug sql
                ADOmate_DatabaseUpdate(CN, SQL)
                Debug ADOmate_GetLastErrorDescription()
             
               EndIf
Gruß Falko

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 01.05.2010 14:45
von Ingo Platte
Danke für die Antwort, aber das funktioniert auch nicht.

Beispiel:
Ich habe 3 Tabellen in einer Exceldatei diese nennen sich: HP, EK und BM
diese Tabellen speichere ich so ab:

Code: Alles auswählen

Dim Table.s(0)
CountTables = ADOmate_ListDatabaseTables(ConnectionString, Table()) -1
in der Table() ändern sich diese Tabellennamen komischerweiser in: HP$, EK$ und BM$

ich weiss nicht warum immer ein Dollarzeichnen automatisch hinzugefügt wird, es muß aber irgendwie notwendig sein, weil wenn ich diese Tabellennamen, wie folgt, direkt eingebe

Code: Alles auswählen

sql.s = "UPDATE HP SET " +  ADOmate_DatabaseColumnName(CN, ColCounter1) + " = 11"
ADOmate_DatabaseUpdate(CN, SQL)
Debug sql
Debug ADOmate_GetLastErrorDescription()
erhalt ich folgende Debuggerausgabe:
UPDATE HP SET F1 = 11
Das Microsoft Jet-Datenbankmodul konnte das Objekt 'HP' nicht finden. Stellen Sie sicher, dass das Objekt existiert und dass die Namens- und Pfadangaben richtig eingegeben wurden.


Füge ich nun dieses Dollarzeichen ein

Code: Alles auswählen

sql.s = "UPDATE HP$ SET " +  ADOm ......
erhalte ich folgende Ausgabe:
UPDATE HP$ SET F1 = 11
Syntaxfehler in UPDATE-Anweisung.


Das ganz ist irgendwie total verzwickt, der SQL-Syntax stimmt eigentlich, bekomme aber denoch diese Fehlermeldung :freak:

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 01.05.2010 15:33
von Falko
Anscheinend geht das so einfach nicht. Hierzu habe ich was passendes gefunden.

http://www.wer-weiss-was.de/theme35/article734720.html

Nur mit Einfügen und definieren kennt mein Excel 2007 nicht. Dazu habe ich einfach nur
den Bereich markiert, der definiert werden soll und dann mit Rechtsklick auf das Markierte Feld
dann im Dialog "Bereich benennen" ausgewählt. Darauf hin kann man diesen Bereich einen Namen
geben. Zwar steht im Reiter "Tabelle1" bei mir der mit einem $ durch Adomate ergänzt wird, aber wenn ich das so mache wie gestern geschrieben und den benannten Bereich auch Tabelle1 vorgebe, geht es bei mir.

Gruß Falko

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 01.05.2010 16:28
von mk-soft
Habe mal die Update Syntax für Excel mit einer einfachen Tabelle ausprobiert.
Bei Dir fehlt wohl das "Where".

Code: Alles auswählen

  SQL = "Update [Adressen$] Set vorname = 'Jörg' Where recid = 0;"
Das ganze mal nicht mit ADOMate, sondern mit ExDatabase.pbi

Code: Alles auswählen


IncludeFile "source\ExDatabase.pbi"

EnableExplicit

UseODBCDatabase()
;InitDatabase()

Define.s dbName1 = GetCurrentDirectory() + "Adressen_001.xls" ; könnt Ihr anpassen
Define.s DSN, DSN1
Define.s SQL
Define.l db = 0
Define.l result 

dsn1 = AddDSN(dbName1, "", "", "", "DSN=MyDSN;DESCRIPTION=Excel Testdatei") ; DSN hinzufügen
Debug "DSN=" + dsn1
Debug Len(dsn1)
; Datenbank verbinden
If OpenDatabase(db, DSN1, "", "") = 0
  End
EndIf

If IsDatabase(db)
  ; SQL Befehl zum Auslesen von Daten der Tabelle
  SQL = "Select * from [Adressen$] order by nachname asc;"
  If DatabaseQuery(db, SQL) ; SQL Befehl ausführen
    Debug "Daten in Tabelle 'Adressen'" : Debug ""
    While NextDatabaseRow(db) ; gelesene Daten aus der Datenbank durchlaufen
      Debug Str(GetDatabaseLong(db, 0)) + ": " + GetDatabaseString(db, 1) + " " + GetDatabaseString(db, 2) ; gelesene Daten aus der Datenbank ausgeben
    Wend
  EndIf
  
  ; SQL Befehl zum Auslesen von Daten der Tabelle
  SQL = "Select Count(*) from [Adressen$];"
  If DatabaseQuery(db, SQL) ; SQL Befehl ausführen
    Debug "Daten in Tabelle 'Adress'" : Debug ""
    While NextDatabaseRow(db) ; gelesene Daten aus der Datenbank durchlaufen
      Debug Str(GetDatabaseLong(db, 0))
    Wend
  Else
    Debug DatabaseError()
  EndIf
  
  ; SQL Befehl zum ändern von Daten der Tabelle
  SQL = "Update [Adressen$] Set vorname = 'Jörg' Where recid = 0;"
  If DatabaseUpdate(db, SQL) ; SQL Befehl ausführen
    Debug "Daten in Tabelle 'Adress' geändert" : Debug ""
  Else
    Debug DatabaseError()
  EndIf
  
  CloseDatabase(db)
EndIf

; Tabellen lesen
If ExamineTables(dsn1)
  Debug "Tabellen in Database:"
  Debug ""
  While NextTable()
    Debug GetTableName() + "  <--  " + GetTableType()
  Wend
  Debug "" : Debug ""
EndIf

result = RemoveDSN(dsn1); DSN wieder entfernen
If Result = 0
  MessageRequester("SQLError", GetSQLInstallerError())
EndIf
Download http://mk-soft.homepage.t-online.de/fil ... l/pb_v430/

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 02.05.2010 17:33
von Ingo Platte
So, ich hab den Fehler gefunden, ich muß die Tabelle in eckigen Klammern setzten
dann funktioniert auch:

Code: Alles auswählen

sql.s = "UPDATE [HP$] SET " +  ADOm ......
Trotzdem, danke für eure Tipps :allright:

Re: Fehler in der Excel Bearbeitung mit ADOmate

Verfasst: 02.05.2010 17:57
von Falko
Nicht schlecht. Danke für den Tip mit den klammern.

So geht es ja nun auch automatisch mit den vorhandenen Tabellen, die alle in einer
Arbeitsmappe gefunden und abgeändert werden. Das $-Zeichen ist wegen der Arbeitsmappe
mit mehreren Tabellen, was ich letztens irgendwo bei MS gelesen habe.

Code: Alles auswählen

sql.s = "UPDATE " + "["+Table(TableCounter)+"] "+ " SET " + ADOmate_DatabaseColumnName(CN, ColCounter1) + " = '1111'"
Gruß Falko