mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
272 lines
10 KiB
Text
272 lines
10 KiB
Text
@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!
|