[MySQL/MyODBC/Access] exporteren gaat mis spaties tabelnaam

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Zoals al in eerdere topics aangegeven probeer ik een VBA-script te schrijven dat een MySQL-server gebruikt voor een online backup. Nu heb ik de verbinding op zich gaande en mijn script werkt nu, totdat een tabelnaam spaties bevat.

Nu heb ik twee opties
  1. geen spaties gebruiken
  2. het script aanpassen
Aangezien de database zo veel mogelijk backwards compatible moet zijn, heeft optie twee zeer sterk de voorkeur. :P

Wat ik al geprobeerd heb:
  • tabelnamen tussen haken plaatsen '[' en ']'
  • tabelnamen tussen aanhalingstekens plaatsen (chr(34)
  • tabelnamen tussen enkelvoudige aanhalingstekens plaatsen "`" en "'"
Dit alles werkt niet. Opvallend is dat wanneer ik ` gebruik het script nog werkt, terwijl wanneer ik ' gebruik er al direct een foutmelding volgt. |:(

Heeft iemand een tip? Hier volgt de code (in VBA dus).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Public Sub online_exporteren()
'declaratie variabelen
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Dim sql As String
Dim mysql_server As String
Dim mysql_username As String
Dim mysql_password As String
Dim mysql_database As String
Dim connectstring As String
Dim Secretariaat As New Collection
Dim Lesgegevens As New Collection
Dim Instrumenten As New Collection
Dim financien As New Collection

'eerst de variabelen voor de verbinding invullen
mysql_server = "jubalvarsseveld.nl"
mysql_username = "*****"
mysql_password = "****"
mysql_database = "*****"

'invullen tabelvariabelen
With Secretariaat
    .Add "Adresgegevens"
    .Add "Functies"
    .Add "Functie aan Lid"
    .Add "Postcodes"
    .Add "Straatnamen"
    .Add "Woonplaatsen"
    .Add "Lidmaatschapsonderbreking"
End With

With Lesgegevens
    .Add "Les_docenten"
    .Add "Lesdagen"
    .Add "Lesgegevens"
    .Add "Leslokaties"
End With

With Instrumenten
    .Add "Instrument aan Lid"
    .Add "Instrumenten - onderhoudsstaat"
    .Add "Instrumenten - overige uitleen"
    .Add "Instrumentenlijst"
    .Add "Instrumentenmerken"
    .Add "Instrumenttypes"
End With

With financien
    .Add "Contributie aan Functies"
    .Add "Korting aan Functies"
    .Add "Transacties"
    .Add "Transactiesoorten"
End With


'vervolgens connectiestring
connectstring = "DRIVER={MySQL ODBC 3.51 Driver};" _
    & "SERVER=" & mysql_server & ";" _
    & "DATABASE=" & mysql_database & ";" _
    & "UID=" & mysql_username & _
    ";PWD=" & mysql_password & _
    ";OPTION=131072"
  

'connect to MySQL server using MySQL ODBC 3.51 Driver
Set conn = New ADODB.Connection
conn.ConnectionString = connectstring


'eerst huidige tabellen hernoemen
For x = 1 To Secretariaat.Count
    conn.Open
    conn.Execute ("DROP TABLE IF EXISTS `" & Secretariaat(x) & "_backup`")
    sql = "ALTER TABLE `" & Secretariaat(x) & "` RENAME `" & Secretariaat(x) & "_backup`"
    conn.Execute (sql)
    conn.Close
Next

'alles exporteren
For x = 1 To Secretariaat.Count
    DoCmd.TransferDatabase acExport, "ODBC", "ODBC;" & connectstring, acTable, Secretariaat(x), Secretariaat(x)
Next

End Sub

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Misschien heel simpel gedacht, maar kan je niet in vba een stringreplace doen op een " " naar een onlogische code (vb. "_&_&_&_&_&_") want volgens mij geen zekerheid kan je in mysql geen tabelnamen aanmaken met een spatie.

Moet je alleen bij het restore script de onlogische code nog terugzetten naar een spatie???

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Gomez12 schreef op 06 mei 2004 @ 20:43:
Misschien heel simpel gedacht, maar kan je niet in vba een stringreplace doen op een " " naar een onlogische code (vb. "_&_&_&_&_&_") want volgens mij geen zekerheid kan je in mysql geen tabelnamen aanmaken met een spatie.

Moet je alleen bij het restore script de onlogische code nog terugzetten naar een spatie???
Nou.. het aardige is: de tabelnamen staan al online met spatie, aangezien ik deze met Access geexporteerd heb via ODBC naar deze MySQL server.

Het kan dus wel. Hoe regel ik dat ik met VBA hetzelfde kan als M$ intern in Access wel lukt (via exporteren dus)?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

TromboneFreakus schreef op 06 mei 2004 @ 20:52:
[...]


Nou.. het aardige is: de tabelnamen staan al online met spatie, aangezien ik deze met Access geexporteerd heb via ODBC naar deze MySQL server.

Het kan dus wel. Hoe regel ik dat ik met VBA hetzelfde kan als M$ intern in Access wel lukt (via exporteren dus)?
Sterker nog, in MySQL kun je ze ook aanmaken met spaties, maar het is mij ook nog nooit gelukt om met een tabelnaam/veldnaam met spaties te werken. Nou moet ik zeggen dat ik ook niet echt intensief geprobeerd heb, want spaties in tabel/veldnamen zijn gewoon not done. Ik zou de mogelijkheid tot hernamen toch maar eens goed bekijken.

offtopic:
Het is gewoon MS hoor. "Geintjes" als M$ worden hier niet echt gewaardeerd. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ik meen me te herinneren dat de VBA-help het gebruik van docmd.transferdatabase afraadt en adviseert om DAO of ADOX objecten te gebruiken. Misschien dat het dan wel lukt?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Niesje schreef op 06 mei 2004 @ 22:28:
Ik meen me te herinneren dat de VBA-help het gebruik van docmd.transferdatabase afraadt en adviseert om DAO of ADOX objecten te gebruiken. Misschien dat het dan wel lukt?
Zou ik kunnen proberen. Maar dan moet ik toch iedere record individueel exporteren naar de MySQL-server?

Bovendien: het werkt wel, alleen niet zodra er spaties gebruikt worden. Dus in die zin ligt het niet zo zeer aan het gebruikte commando...

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
NMe84 schreef op 06 mei 2004 @ 22:00:
[...]

Sterker nog, in MySQL kun je ze ook aanmaken met spaties, maar het is mij ook nog nooit gelukt om met een tabelnaam/veldnaam met spaties te werken. Nou moet ik zeggen dat ik ook niet echt intensief geprobeerd heb, want spaties in tabel/veldnamen zijn gewoon not done. Ik zou de mogelijkheid tot hernamen toch maar eens goed bekijken.
Punt is dat ik nu een database heb met importeer/exporeer functie naar losse bestanden. Naast dit zou ik dus een conversiemodule moeten schrijven, alleen maar om vervolgens voortaan de online module te kunnen gebruiken. Zo lang ik online vooral gebruik om gegevens te kunnen uitwisselen tussen verschillende gebruikers is renamen volgens mij een vrij zwaar middel (tenzij echt nodig dus...).
offtopic:
Het is gewoon MS hoor. "Geintjes" als M$ worden hier niet echt gewaardeerd. :)
offtopic:
Je hebt gelijk, het is een automatisme van vroeger. Ik gebruik het telkens minder

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

TromboneFreakus schreef op 06 mei 2004 @ 22:51:
Punt is dat ik nu een database heb met importeer/exporeer functie naar losse bestanden. Naast dit zou ik dus een conversiemodule moeten schrijven, alleen maar om vervolgens voortaan de online module te kunnen gebruiken. Zo lang ik online vooral gebruik om gegevens te kunnen uitwisselen tussen verschillende gebruikers is renamen volgens mij een vrij zwaar middel (tenzij echt nodig dus...).
Is het niet in overweging te nemen de namen in de originele database eenmalig aan te passen? Dan heb je al die conversiemodules niet meer nodig en dan is je originele datamodel ook meteen een stuk beter...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

TromboneFreakus schreef op 06 mei 2004 @ 22:48:
[...]


Zou ik kunnen proberen. Maar dan moet ik toch iedere record individueel exporteren naar de MySQL-server?

Bovendien: het werkt wel, alleen niet zodra er spaties gebruikt worden. Dus in die zin ligt het niet zo zeer aan het gebruikte commando...
En de doeltabel tijdelijk opnemen als gekoppelde tabel in je access-database en een query runnen die de feitelijke export voor zijn rekening neemt?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
NMe84 schreef op 06 mei 2004 @ 22:57:
[...]

Is het niet in overweging te nemen de namen in de originele database eenmalig aan te passen? Dan heb je al die conversiemodules niet meer nodig en dan is je originele datamodel ook meteen een stuk beter...
De database is al verspreid, ik ontwikkel zeg maar nu versie 1.1 met de mogelijkheid tot online datauitwisseling. Aanpassen betekent nu dus conversie, want allerlei tabellen zijn ook weer aan elkaar gekoppeld.
Pagina: 1