myodbc-br.texi 10.1 KB
Newer Older
bk@work.mysql.com's avatar
bk@work.mysql.com committed
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!