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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
@chapter MySQL ODBC Suporte
@menu
* Quais ODBC OS:: Sistemas Operacionais são suportados por @strong{MyODBC}
* Problemas ODBC:: Como informar problemas com @strong{MySQL} ODBC
* Clientes MyODBC:: Programas que já foram testados com @strong{MyODBC}
* Administrador ODBC:: Como preencher os diversos campos com o programa Administrador
* ODBC e last_insert_id:: Como obter o valor de uma coluna @code{AUTO_INCREMENT} em ODBC
* Informando bug do MyODBC:: Informando problemas com MyODBC
@end menu
@strong{MySQL} fornece suporte para ODBC através do programa @strong{MyODBC}.
@node Quais ODBC OS, ODBC Problemas, ODBC, ODBC
@section Sistemas Operacionais suportados por MyODBC
@strong{MyODBC} é um driver 32-bit ODBC (2.50) nível 0 para Windows95
e Windows NT. Nós esperamos que alguém porte o mesmo para o Windows 3.x.
@node Problemas ODBC, clientes MyODBC, Quais ODBC OS, ODBC
@section Como informar problemas com MyODBC
@strong{MyODBC} tem sido testado com Access, Admndemo.exe, C++-Builder,
Centura Team Developer (formalmente Gupta SQL/Windows), ColdFusion (no
Solaris e NT com svc pack 5), Crystal Reports, DataJunction, Delphi,
ERwin, Excel, iHTML, FileMaker Pro, FoxPro, Notes 4.5/4.6, SBSS, Perl
DBD-ODBC, Paradox, Powerbuilder, Powerdesigner 32 bit, VC++ e Visual
Basic.
Se você souber de algum outro aplicativo que funcione com @strong{MyODBC}, por favor
nos escreva sobre isso através do email @email{myodbc@@lists.mysql.com}.
@node Clientes MyODBC, Administrador ODBC, Problemas com ODBC, ODBC
@section Programas testados que funcionam com MyODBC
A maioria dos programas que têm suporte para ODBC, funcionam com o @strong{MyODBC},
mas cada um dos listados abaixo, têm sido testados por nós ou por informações de
usuários que confirmaram o seu funcionamento.
@table @asis
@item @strong{Program}
@strong{Comment}
@item Access
Como fazer Accces funcionar:
@itemize @bullet
@item
Você deverá ter uma chave primária na tabela.
@item
Você deve ter um campo timestamp em todas as tabelas em que você quer controlar a
atualização.
@item
Somente use campos doubles float. Access falha quando faz comparações com campos float
simples.
@item
Configure a opção `Return matching rows' quando conectar com o @strong{MySQL}.
@item
O Access no NT acusará colunas @code{BLOB} como @code{OLE OBJECTS}.
Se ao invés disso você quer colunas @code{MEMO}, deve trocar a coluna para
@code{TEXT} usando @code{ALTER TABLE}.
@item
Access às vezes não lida adequadamente com colunas do tipo @code{DATE}.
Se você tiver problemas com essas colunas, mude as colunas para @code{DATETIME}.
@item
Em certas situações, o Access cria consultas SQL ilegais que o
@strong{MySQL} não pode processar. Você pode resolver isso selecionando o tipo de
consulta @code{"Query|SQLSpecific|Pass-Through"} no menu do Access.
@end itemize
@item DataJunction
Você tem que trocar para mandar @code{VARCHAR} ao invés de @code{ENUM}, porque
o mesmo exporta o último de uma maneira que causa fadiga ao @strong{MySQL}.
@item Excel
Funciona. Algumas dicas:
@itemize @bullet
@item
Se você tem problemas com datas, tente selecioná-las como strings usando a
função @code{CONCAT()}. Por exemplo:
@example
select CONCAT(rise_time), CONCAT(set_time)
from sunrise_sunset;
@end example
Os dados de datas enviadas como string são corretamente reconhecidas pelo
Excel97 como dados do tipo time.
Neste exemplo o propósito de @code{CONCAT()} é enganar o ODBC, fazendo-o pensar
que a coluna é do 'tipo string'. Sem o @code{CONCAT()}, ODBC sabe que a coluna
é do tipo time e o Excel não entenderá isso.
Note que isso é um bug no Excel, porque o mesmo converte automaticamente a
string para time. Isto é muito bom quando o fonte é um arquivo
texto, mas não se pode dizer o mesmo quando o fonte é uma conexão
ODBC que informa o tipo exato para cada coluna.
@end itemize
@item odbcadmin
Programa Teste para ODBC.
@item Delphi
Você deverá usar DBE 3.2 ou mais atualizado. Configure o campo de opção
`Don't optimize column width' quando conectando com @strong{MySQL}.
Também, há aqui um código muito útil que configura tanto a
inserção ODBC e a inserção BDE para MyODBC (a inserção BDE requer um BDE
Alias Editor que pode ser obtido de graça numa Delphi Super Page
perto de você.): (Obrigado a Bryan Brunton @email{bryan@@flesherfab.com} por isto)
@example
fReg:= TRegistry.Create;
fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
fReg.WriteString('Database', 'Documents');
fReg.WriteString('Description', ' ');
fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
fReg.WriteString('Flag', '1');
fReg.WriteString('Password', '');
fReg.WriteString('Port', ' ');
fReg.WriteString('Server', 'xmark');
fReg.WriteString('User', 'winuser');
fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
fReg.WriteString('DocumentsFab', 'MySQL');
fReg.CloseKey;
fReg.Free;
Memo1.Lines.Add('DATABASE NAME=');
Memo1.Lines.Add('USER NAME=');
Memo1.Lines.Add('ODBC DSN=DocumentsFab');
Memo1.Lines.Add('OPEN MODE=READ/WRITE');
Memo1.Lines.Add('BATCH COUNT=200');
Memo1.Lines.Add('LANGDRIVER=');
Memo1.Lines.Add('MAX ROWS=-1');
Memo1.Lines.Add('SCHEMA CACHE DIR=');
Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
Memo1.Lines.Add('SQLQRYMODE=');
Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
Memo1.Lines.Add('ENABLE BCD=FALSE');
Memo1.Lines.Add('ROWSET SIZE=20');
Memo1.Lines.Add('BLOBS TO CACHE=64');
Memo1.Lines.Add('BLOB SIZE=32');
AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
@end example
@item C++Builder
Testado com BDE 3.0. O único problema conhecido é que quando o esquema da tabela
muda, os campos da consulta não são atualizados. BDE entretanto, parece não
reconhecer chaves primárias, somente Índice PRIMARY, não entanto isto não
tem sido um problema.
@item Visual basic
Para atualizar uma tabela, você deverá definir uma chave primária para a tabela.
@end table
@node Administrador ODBC, ODBC e last_insert_id, Clientes MyODBC, ODBC
@section Como preencher os diversos campos com o programa Administrador
Existem três possibilidades para especificar o nome do servidor em
Windows95:
@itemize @bullet
@item
Usando o endereço IP do servidor.
@item
Adicionar um arquivo @file{lmhosts} com a seguinte informação:
@example
ip nomeservidor
@end example
Por exemplo:
@example
194.216.84.21 my
@end example
@item
Configurar o PC para usar DNS.
@end itemize
Exemplo de como preencher o ``ODBC setup'':
@example
Windows DSN name: teste
Description: Este é o meu banco de dados teste
MySql Database: teste
Server: 194.216.84.21
User: monty
Password: minha_senha
Port:
@end example
O valor para o campo @code{Windows DSN name} é qualquer nome que seja único
em seu Windows ODBC setup.
Você não precisa especificar os valores para os seguintes campos: @code{Server},
@code{User}, @code{Password} ou @code{Port} na hora de configurar o ODBC.
Entretanto, se você o faz, esses valores devem ser usados como padrão para fazer
uma conexão. Você tem a opção de trocar os valores nesse instante.
Se o número da porta não for especificado, o valor padrão da porta (@value{default_port})
é usado.
Se você especificar a opção @code{Read options from C:\my.cnf}, os
grupos @code{client} e @code{odbc} devem ser lidos do arquivo @file{C:\my.cnf}.
Você pode usar todas as opções que são usadas por @code{mysql_options()}.
@xref{mysql_options, , @code{mysql_options}}.
@node ODBC e last_insert_id, Informando bug do MyODBC, Administrador ODBC, ODBC
@section Como obter o valor de uma coluna @code{AUTO_INCREMENT} no ODBC
Um problema muito usual consiste em como saber o valor de uma coluna do tipo
@code{INSERT} quando a mesma é gerada automaticamente. Com ODBC, você pode
fazer uma coisa como esta (assumindo que @code{auto} é um campo @code{AUTO_INCREMENT}):
@example
INSERT INTO foo (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();
@end example
Ou se você somente quer adicionar o valor noutra tabela, faça o
seguinte:
@example
INSERT INTO foo (auto,text) VALUES(NULL,'text');
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
@end example
Para o benefício de algumas aplicações ODBC (pelo menos Delphi e Access),
a seguinte consulta pode ser usada para encontrar o valor do novo registro
adicionado:
@example
SELECT * FROM tbl_name WHERE auto IS NULL;
@end example
@node Informando bug do MyODBC, , ODBC e last_insert_id, ODBC
@section Informando problemas com MyODBC
Se você encontra dificuldades com MyODBC, deve começar por fazer
um arquivo log no Administrador ODBC (o log você tem quando
solicita logs do ODBCADMIN) e um log @strong{MyODBC}. Para gerar um log @strong{MyODBC},
clique a opção `Trace MyODBC' na tela de configuração da conexão
@strong{MyODBC}.
O log será escrito no arquivo @file{C:\myodbc.log}.
Note que você deve usar a @code{MYSQL.DLL} e não a
@code{MYSQL2.DLL} para que esta opção funcione!
Verifique as consultas que MyODBC envia para o servidor @strong{MySQL};
Você deverá ser capaz de encontrar isto através da pesquisa da
string @code{>mysql_real_query} no arquivo @file{myodbc.log}.
Você deve também tentar duplicar as consultas no monitor @code{mysql}
ou @code{admndemo} para encontrar se o erro é do MyODBC ou do @strong{MySQL}.
Se você encontrar algo errado, por favor envie somente as linhas
relevantes (máximo 40 linhas) para o @email{myodbc@@lists.mysql.com}. Favor nunca
enviar os arquivos log completos do MyODBC ou do ODBC !
Se você não encontra o quê está errado, a última opção
é fazer um arquivo (tar ou zip) que contenha um arquivo log do MyODBC,
o arquivo log ODBC e um arquivo README que explique o problema.
Você o manda para @uref{ftp://www.mysql.com/pub/mysql/secret}. Somente nós da TCX
devemos ter acesso a esses arquivos que você manda e nós seremos muito discretos com
os dados !
Se você pode fazer um programa que também mostre o mesmo problema, favor mandá-lo
também!
Se o programa funciona com outro servidor SQL, você pode fazer um
arquivo log que faça exatamente a mesma coisa com o outro servidor
SQL.
Lembre que quanto mais informação você nos fornece, o resultado é
que nós podemos resolver o problema!