Fehler in der Excel Bearbeitung mit ADOmate

Für allgemeine Fragen zur Programmierung mit PureBasic.
Ingo Platte
Beiträge: 26
Registriert: 10.09.2004 15:12

Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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)
Ingo Platte
Beiträge: 26
Registriert: 10.09.2004 15:12

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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)
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Ingo Platte
Beiträge: 26
Registriert: 10.09.2004 15:12

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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/
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Ingo Platte
Beiträge: 26
Registriert: 10.09.2004 15:12

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Fehler in der Excel Bearbeitung mit ADOmate

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten