Aus Excel auf Mysql zugreifen

Hallo zusammen, ich stecke fest.

Via Myodbc kann ich über MS-Query, über den Befehl sql.request() aus einer Tabelle und sogar über DAO aus VBA zugreifen.
Letzteres aber nur auf eine bestimmte Tabelle (ISAM). Will ich auf eine andere Tabelle zugreifen, hat er mir zuerst gemeldet, ein weiterer User wolle bereits darauf zugreifen, nachdem ich das neueste stabile myodbc (2.50.39) installiert habe, meldet er nur noch
„Laufzeitfehler 3146 - ODBC-Aufruf fehlgeschlagen“

Hat das was mit ISAM und MYISAM zu tun? Dabei ist doch MYISAM moderner. Irgendwo habe ich auch was mit einem counter gelesen, der eine Tabelle ‚locken‘ kann, habe aber schon mit Repair versucht, die Tabelle zu reparieren, war aber alles in Ordnung. Auch rechtemäßig habe ich mit absoluten Adminrechten darauf zugegriffen, will einfach nicht.

Hier die Daten:

Meine Super DAO-Programmierung (bloody beginner):

(Auszug)
abfragestring = „SELECT * from arbeitsplan where id = 635“
'Debug.Print abfragestring

Set ws = DBEngine.Workspaces(0)
Let strConnection = „ODBC;DSN=“ & databasename & „;UID=“ & username _
& „:stuck_out_tongue_winking_eye:WD=“ & userpassword
Set db = ws.OpenDatabase("", False, False, strConnection)

Set rs = db.openrecordset(abfragestring)
rs.Edit
rs.Fields(feld) = wertfeld
rs.Update

rs.Close
Set rs = Nothing

ws.Close
Set ws = Nothing

Die MYISAM-Tabelle, auf die er nicht zugreifen kann:

Table structure for table ‚arbeitsplan‘

CREATE TABLE /*!32300 IF NOT EXISTS*/ arbeitsplan (
pid smallint(5) unsigned NOT NULL DEFAULT ‚0‘ ,
arbeitsgang tinyint(3) unsigned NOT NULL DEFAULT ‚1‘ ,
maschine decimal(4,1) NOT NULL DEFAULT ‚0.0‘ ,
bemerkung1 varchar(160) NOT NULL DEFAULT ‚‘ ,
bemerkung2 varchar(160) ,
status tinyint(3) unsigned ,
ruesten_min tinyint(3) unsigned ,
fertigen_min_je_einheit decimal(5,3) ,
einheit tinyint(2) unsigned DEFAULT ‚1‘ ,
pruef1 varchar(8) ,
pruef2 varchar(8) ,
pruef3 varchar(8) ,
id smallint(5) unsigned NOT NULL auto_increment,
PRIMARY KEY (id),
UNIQUE id (id),
INDEX masch (maschine),
INDEX arbg (arbeitsgang),
INDEX pid (pid),
INDEX id_0 (id)
);

Dumping data for table ‚arbeitsplan‘

INSERT INTO arbeitsplan VALUES(„63“,„1“,„120.0“,„ungefüllter Schmelzkleber - höhere Wärmestandfestigkeit“,"(es werden teilweise Bohrungen für Lampen angebracht)",„0“,„0“,„0.000“,NULL,"","","",„631“);
INSERT INTO arbeitsplan VALUES(„63“,„2“,„121.0“,„1xschleifen“,NULL,„0“,„0“,„0.000“,NULL,NULL,NULL,NULL,„632“);
INSERT INTO arbeitsplan VALUES(„63“,„99“,„35.0“,„Kurzlängen über 2 m gehen mit !“,„Furnierarten nebeneinander getrennt, gebündelt nach Furnierpaketen !“,„0“,„0“,„0.000“,NULL,NULL,NULL,NULL,„729“);
INSERT INTO arbeitsplan VALUES(„63“,„21“,„109.0“,„auf Europaletten“,NULL,„0“,„0“,„0.000“,NULL,NULL,NULL,NULL,„651“);
INSERT INTO arbeitsplan VALUES(„63“,„22“,„33.0“,„Blume nur im Berech 6 cm von der hinteren Seite !“,NULL,„0“,„0“,„0.000“,NULL,NULL,NULL,NULL,„652“);

Dies sind nur ein paar Beispielzeilen.
So, was jetzt?

Wenn das mit DAO klappen würde, wäre mir sehr geholfen. Über Mysql-Front und sql.request() kann ich ohne Probleme auf die Tabelle zugreifen. Auf die andere ISAM-Tabelle auch mittels obigem VBA-Code (der abfragestring wird normalerweise dynamisch generiert, wurde hier nur der Einfachheit halber direkt eingesetzt)

Wenn ADO funktionieren würde, wäre mir auch geholfen, aber das habe ich noch nicht zum laufen gebracht, kenne mich mit ADO und DAO noch nicht so super aus.

Danke für die Hilfe im Voraus

Easy

Probleme nur noch bei Textfeldern
Hallo zusammen, ich stecke jetzt woanders fest.

Via ADO habe ich es hinbekommen, dass ich in manche Felder der MYISAM Tabelle etwas eintragen kann, aber nur in Felder, in die Zahlen eingegeben werden. Wenn ich in Textfeldern Zahlen eingebe, klappt es auch, aber wenn ich dort Text eingeben will, meldet ADO , dass „einige Fehler aufgetreten“ sind, dazu ein Laufzeitfehler ‚-2147217887 (80040e21)‘

Die Variable ist bereits als String deklariert, damit schafft er auch die Zahlen, aber Text klappt nicht. Habe auch schon versucht, Text mit einfachen/doppelten Anführungszeichen einzutragen. Will er nicht.

Wat nu?

Achim

Code:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String, ConnectionString$

'connect to MySQL server using MySQL ODBC Driver
Set conn = New ADODB.Connection
ConnectionString = „DRIVER=MySQL;“ _
& „SERVER=server;“ _
& " DATABASE=schumann_gmbh;"

conn.Open ConnectionString, „deleter“, „terror“
conn.Execute „use schumann_gmbh“
Set rs = New ADODB.Recordset
'rs.CursorLocation = adUseServer

rs.Open abfragestring, conn, adOpenDynamic, adLockOptimistic
rs.Fields(feld) = wertfeld
rs.Update
rs.Close

conn.Close

Problem gelöst !!!
Yeah!!

Doofes ADO. Ich habe jetzt die Art der Auswahl des Datensatzes, auf den sich die Änderung beziehen soll abgeändert, das SQL-Statement „Select“ mit „where“ danach hat er anscheinend nicht gerafft, oder war ihm zu simpel. Jetzt mit ‚nur Select‘ und anschließend ADO-mäßigem „move first“ und danach Suchen mit „Find“ schnurrt ADO wie ein Kätzchen!

Oh Mann, der ganze Tag hat sich doch noch zu guter letzt gelohnt. Danke für Eure Mithilfe g*.

Wollte Euch noch ein bischen an meiner Freude teilhaben lassen, und Bescheid geben, dass keiner sich (mehr) um mich sorgen braucht.

Hastalavista

Easy

Auch hier wieder der Code:
rs.Open abfragestring, conn, adOpenDynamic, adLockOptimistic
rs.MoveFirst
rs.Find id1 & " = " & idwert, , adSearchForward

'rs.MoveFirst
'rs.Fields(id1) = idwert
rs.Fields(feld) = wertfeld