Programas que Funcionam com MyODBC
A maioria dos programas devem funcionar com MyODBC
, mas para cada um dos listados aqui, nós mesmos testamos e recebemos confirmação de alguns usuários que eles funcionam:
- Programa
Comentário
- Access
Para fazer o Access funcionar:
- Se você estiver usando Access 2000, você deve obter e instalar o Microsoft MDAC (
Microsoft Data Access Components
) mais recente (versão 2.6 ou acima) em http://www.microsoft.com/data/. Ele irá consertar o o seguinte bug no Access: quando você exporta dados para o MySQL, os nomes de tabelas e colunas não são especificados. Outro modo de contornar este bug é atualizar para MyODBC Versão 2.50.33 e MariaDB Versão 3.23.x, que juntos fornecem um modo de contornar este erro!Você também deve obter e instalar Microsoft Jet 4.0 Service Pack 5 (SP5) que pode ser encontrado em http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP. Isto irá corrigir alguns casos onde colunas são marcadas como
#deletadas#
no Access.Note que se você estiver usando o MariaDB Versão 3.22, você deve aplicar o patch MDAC e utilizar MyODBC 2.50.32 ou 2.50.34 e acima para contornar este problema.
- Para todas as versões do Access, você deve habilitar a opção do MyODBC
Return matching rows
. Para Access 2.0, você também deve habilitarSimulate ODBC 1.0
. - Você deve ter um timestamp em todas as tabelas que você deseja atualizar. Para maior portabilidade
TIMESTAMP(14)
ou apenasTIMESTAMP
é recomendado no lugar de outras variações deTIMESTAMP(X)
. - Você deve ter uma chave primáia na tabela. Se não, registros novos ou atualizados podem aparecer como
#DELETED#
. - Só use campos
DOUBLE
float. O Access falaha ao comparar com campos single floats. Os sintomas normais são que registros novos ou atualizados podem aparecer como#DELETED#
ou que você não possa encontarar ou atualizar registros. - Se você estiver ligando uma tabela com MyODBC, que tem
BIGINT
como uma de suas colunas, o resultado será mostrado como#DELETED
. A solução para contornar este problema é:- Tenha um ou mais colunas modelos com
TIMESTAMP
como o tipo de dados, de preferênciaTIMESTAMP(14)
. - Verifique
'Change BIGINT columns to INT'
na ciaxa diálogo de opções de conexão no Admiistrador DSN ODBC - Delete o link a tabela e o recrie.
Ele ainda mostra o registro anterior como
#DELETADO#
, mas novos registros adicionados/atualizados serão mostrados apropriadamente. - Tenha um ou mais colunas modelos com
- Se você ainda obter o erro
Another user has changed your data
depois de adicionar uma colunaTIMESTAMP
, o seguinte truque pode lhe ajudar:Nào utilize visualizar planilha de dados da
tabela
. Crie um formulario com os campos que você quer, e use visulizar planilha de dados deformulário
. Você deve definir a propriedadeDefaultValue
para a colunaTIMESTAMP
comNOW()
. Esta pode ser uma boa idéia para oculta a colunaTIMESTAMP
da visualização para que seus usuários não fiquem confusos. - Em alguns casos, o Access pode gerar consultas SQL inválidas que o MariaDB não entende. Você pode arrumar isto selecionando
'Query|SQLSpecific|Pass-Through'
no menu do Access. - No NT o Access irá mostrar colunas
BLOB
comoOLE OBJECTS
. Se você quiser colunasMEMO
, você deve alterar a coluna paraTEXT
comALTER TABLE
. - O Access não pode sempre tratar colunas
DATE
apropriadamente. Se você tiver um problema com isto, mude as colunas paraDATETIME
. - Se você tiver no Acces um coluna definida como
BYTE
, o Access tentará exportá-la comoTINYINT
em vez deTINYINT UNSIGNED
. Isto lhe tará problemas se você tiver valores > 127 na coluna!
- Se você estiver usando Access 2000, você deve obter e instalar o Microsoft MDAC (
- ADO
Quando você está codificando com a API ADO e
MyODBC
você precisa ter atenção com algumas propriedades padrões que não são suportadas pelo servidor MySQL. Por exemplo, usandoCursorLocation Property
comoadUseServer
retornará deRecordCount Property
um resultado de -1. Para ter o valor correto, você precisa definir esta propriedade aadUseClient
, como mostrado no código VB abaixo:Dim myconn As New ADODB.Connection Dim myrs As New Recordset Dim mySQL As String Dim myrows As Long myconn.Open 'DSN=MyODBCsample' mySQL = 'SELECT * from user' myrs.Source = mySQL Set myrs.ActiveConnection = myconn myrs.CursorLocation = adUseClient myrs.Open myrows = myrs.RecordCount myrs.Close myconn.Close
Outro modo de contornar o problea é utilizar uma instrução
SELECT COUNT(*)
para uma consulta parecida para obter a contagem de registros correta. - Active server pages (ASP)
Você deve usar a opção
Return matching rows
. - Aplicações BDE
Para faze-las funcionar, você deve definir os seguintes parâmetros:
Don't optimize column widths
eReturn matching rows
. - Borland Builder 4
Qaundo você inicia uma consulta, você pode utilizar a propriedade
Active
ou utilizar o métodoOpen
. Note queActive
irá iniciar automaticamente executando uma consultaSELECT * FROM ...
que pode não ser algo bom se suas tabelas forem grandes. - ColdFusion (No Unix)
A seguinte informações é tirada da documentação do ColdFusion:
Utilize a seguinte informação para configurar o ColdFusion Server para Linux para utilizar o driver unixODBC driver com
MyODBC
para fonte de dados MySQL. Allaire verificou que oMyODBC
Versão 2.50.26 funciona com MariaDB Versão 3.22.27 e ColdFusion para Linux. (Quqlquer versão mais nova também deve funcionar.) Você pode fazer o download doMyODBC
em http://www.mysql.com/downloads/api-myodbc.htmlColdFusion Versão 4.5.1 lhe permite utilizar o Administrador ColdFusion para adicionar a fonte de dados MySQL. No entanto o driver não está incluído com o ColdFusion Versão 4.5.1. Antes que o driver MariaDB aparecer na lista drop-down de fonte de dados ODBC, você deve construir e copiar o driver
MyODBC
para/opt/coldfusion/lib/libmyodbc.so
.O diretório Contrib contém o programa
mydsn-xxx.zip
que lhe permite construir e remover o arquivo de registro DSN para o driver MyODBC em aplicações Coldfusion. - DataJunction
Você tem que alterá-lo para uma saída
VARCHAR
em vez deENUM
, ja que ele exporta o último de uma maneira que cause um grief no MariaDB. - Excel
Funciona. Algumas dicas:
- Se você tiver problema com datas, tente selecioná-las como strings utilizando a função
CONCAT()
. Por exemplo:select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;
Valores retornados deste modo como strings devem ser reconhecidos corretamente como valores time pelo Excel97.
O propósito de
CONCAT()
neste exemplo é enganar o ODBC fazendo-o pensar que a coluna é dotipo string
. Sem oCONCAT()
, ODBC sabe que a coluna é do tipo time e o Excel não entende isto.Note que este é um bug do Excel, pois ele converte automaticamente uma string para um time. Isto seria ótimo se a fonte fosse um arquivo texto, mas se torna um erro quando a fonte e uma conexão ODBC que relata tipos exatos para cada coluna.
- Se você tiver problema com datas, tente selecioná-las como strings utilizando a função
- Word
Para recuperar os dados do MariaDB para documentos Word/Excel, você precisa utilizar o driver
MyODBC
e a ajuda do Add-in Microsoft Query.Por exemplo, crie um bd com uma tabela contendo 2 colunas de texto:
- Insira registros utilizando a ferramente cliente de linha de comando
MariaDB
. - Crie um arquivo DSN usando o gerenciador ODBC,
my
, por exemplo, para o bd acima. - Abra o aplicativo Word.
- Crie um novo documento vazio.
- Utilizando a barra de ferramentas chamada Banco de Dados, pressione o botão insira banco de dados.
- Pressione o botão Obter Dados.
- No moemnto certo, pressione o botão Ms Query na tela Obter Dados.
- No Ms Query crie uma Nova Fonte de Dados utilizando o arquivo DSN my.
- Selecione a nova consulta.
- Selecione as colunas que você deseja.
- Crie um filtro de desejar.
- Faça um Ordenação se quiser.
- Selecione Enviar Dados para o Microsoft Word.
- Clique em Finalizar.
- Clique em Inserir dados e selecione os registros.
- Clique OK e você verá os registros no seu documento Word.
- Insira registros utilizando a ferramente cliente de linha de comando
- odbcadmin
Pograma teste para ODBC.
- Delphi
Você deve utilizar o BDE Versão 3.2 ou mais atual. Veja a opção i
Don't optimize column width
ao conectar no MariaDB.Aqui está um código de Delphi potencialmente útil que configura uma entrada ODBC e uma entrada BDE para para
MyODBC
(a entrada BDE exige de um Editor de Alias BDE que é gratuito em um site Delphi Super Page. (Obrigado a Bryan Brunton<bryan@flesherfab.com>
por isto):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);
- C++ Builder
Testado com BDE versão 3.0. O único problema conhecido é que quando o esquema de tabelas é alterado, os campos da consulta não são atualizados. O BDE, no entanto, parece não reconhecer chaves primárias, apenas o índice PRIMARY, mas isto será um problema.
- Vision
Você deve utilizar a opcão
Return matching rows
. - Visual Basic
Para estar apto para habilitar uma tabela, você deve definir uma chave primária para a tabela.
Visual Basic com ADO não pode manipular inteiros grandes. Isto significa que algumas consultas como
SHOW PROCESSLIST
não irão funcionar apropriadamente. A correção é deifinir a opçãoOPTION=16384
na string de conexão ODBC ou configurar a opçãoChange BIGINT columns to INT
na tela de conexão do MyODBC. Você pode desejar definir a opçãoReturn matching rows
. - VisualInterDev
Se você obtem o erro
[Microsoft][ODBC Driver Manager] Driver does not support this parameter
a razão pode ser que você tem umBIGINT
em seu resultado. Tente definir a opçãoChange BIGINT columns to INT
na tela de conexão do MyODBC. - Visual Objects
Você deve utilizar a opção
Don't optimize column widths
.