Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Claudio Neto

[Resolvido] Conexao com banco access

Recommended Posts

Estou tentando criar uma conexão com uma banco access. Os únicos dois tópicos que achei aqui com a mesma dúvida não foram resolvidos, então achei uns tutoriais na net.

Tentei usar esse:

http://msdn.microsoft.com/pt-br/library/cc811599%28en-us%29.aspx

 

Tem várias maneiras ai. Tentei via ADO e ODBC. Mas em ambos os casos dá erro. Cada um deles um erro diferente.

 

Com ADO o erro foi na importação:

#import <C:\\arquivos de programas\\arquivos comuns\\system\\ado\\msado15.dll>
Erro:

msado15.dll:9: error: stray '/139' in program

139 é um deles, mas deu o mesmo erro mostrando números diferentes dezenas de vezes.

msado15.dll:10: error: expected declaration before '}' token

 

 

E via ODBC:

#include <sqlext.h>
Erro:

c:/MinGw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/sqlext.h:1196: error:

'SQLCHAR' has not been declared

Também o mesmo erro diversas vezes.

 

Não estou usando IDE, esse é o problema? Se for, tem outro método de fazer conexão sem IDE?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, continuo pesquisando sobre como se conectar com BD, mas está difícil conseguir efetuar alguma coisa.

 

O bd que vou trabalhar é mysql, então até encontrei algumas coisas, e baixei os arquivos que pareciam necessários no site deles.

 

Usei esse post como guia:

http://c-programming.suite101.com/article.cfm/using_a_mysql_databases_with_c

Parece simples e eficaz.

 

Baixei as bibliotecas do site do mysql, mas quando compilo dá erro. O erro é:

In file included from include/mysql.h:71,
                 from mysql.cpp:2:
include/mysql_com.h:268: error: `SOCKET' does not name a type
include/mysql_com.h:437: error: `SOCKET' was not declared in this scope
include/mysql_com.h:437: error: expected primary-expression before "const"
include/mysql_com.h:437: error: expected primary-expression before "unsigned"
include/mysql_com.h:438: error: expected primary-expression before "unsigned"
include/mysql_com.h:438: error: initializer expression list treated as compound
expression
O que acontece? Esse erro aconteceu usando a biblioteca para C.

 

Ai baixei para C++, que acho que seria a correta, só que ai o código muda bastante. Nem sequer existe a biblioteca mysql.h.

 

Estou programando com Notepad++ e compilando com gcc. Vale a pena eu partir para o DevC++? Usando um IDE percebi que encontro muito mais material de como fazer.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, resolvi o problema acima. Basta incluir a windows.h.

 

Mas agora deu outro erro:

C:\C++\mysql>g++ -I./include -L/lib/opt/mysqlcliente.lib mysql.cpp -o mysql
C:\DOCUME~1\neto\CONFIG~1\Temp/ccu4baaa.o:mysql.cpp:(.text+0x32): undefined refe
rence to `mysql_init@4'
C:\DOCUME~1\neto\CONFIG~1\Temp/ccu4baaa.o:mysql.cpp:(.text+0x79): undefined refe
rence to `mysql_real_connect@32'
C:\DOCUME~1\neto\CONFIG~1\Temp/ccu4baaa.o:mysql.cpp:(.text+0x96): undefined refe
rence to `mysql_error@4'
collect2: ld returned 1 exit status

O que achei na net foi falando para referenciar a biblioteca mysqlclient. Mas já fiz isso e nada adiantou.

Minha linha de execução ficou assim:

g++ -I./include -L/lib/opt/mysqlcliente.lib mysql.cpp -o mysql

E agora, o que está errado?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas Isis, baixei direto do site do MySQl com sendo para windows. Se nem lá tem o diretório certo para windows, onde terá?

 

Pelo link que passou, ele diz para referenciar a dll. Mas...

gcc -I/c/mysql/include -L/c/mysql/lib/ mysql.c -o mysql -lmysqlclient

...o que é isso: lmysqlclient?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://dev.mysql.com/doc/refman/5.5/en/connector-c-faq.html

 

você baixou o .msi? Descubra onde estão os .h e as bibliotecas e especifique isso na linha de comando. Mas use os diretórios do Windows.

https://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/gcc/directory-options.html

 

http://www.network-theory.co.uk/docs/gccintro/gccintro_17.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, baixei o msi, mas não tenho opção de qual usar, tem apenas um diretório lá dentro, conforme abaixo:

Imagem Postada

 

Quanto ao link do mysql na parte de FAQ, tudo muito lindo, mas o MSI não instalou alguns diretórios que ele cita lá, por exemplo esses arquivos .so.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isi, eu estou usando a pasta lib, como pode notar na primeira linha que postei de tentativa de compilar.

 

Adicionei a my_global.h como sugerido no link, mas algumas variáeis já estão declaradas dentro de windows.h, então entrou em conflito. Ai retirei o windows.h, mas os erros continuam:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" mysql.cpp -o mysql
In file included from mysql.cpp:2:
C:\\C++\\mysql\\include\\my_global.h:74:24: config-win.h: No such file or direct
ory
C:\\C++\\mysql\\include\\my_global.h:82:25: my_charsets.h: No such file or direc
tory
C:\\C++\\mysql\\include\\my_global.h:590:26: my_attribute.h: No such file or dir
ectory
C:\\C++\\mysql\\include\\my_global.h:627:21: my_dbug.h: No such file or director
y
C:\\C++\\mysql\\include\\my_global.h:819:2: #error "please add -DSTACK_DIRECTION
=1 or -1 to your CPPFLAGS"
In file included from mysql.cpp:2:
C:\\C++\\mysql\\include\\my_global.h: In function `char* strtok_r(char*, const c
har*, char**)':
C:\\C++\\mysql\\include\\my_global.h:825: error: `strtok' was not declared in th
is scope
C:\\C++\\mysql\\include\\my_global.h:890:1: warning: "isnan" redefined
In file included from C:\\C++\\mysql\\include\\my_global.h:424,
                 from mysql.cpp:2:
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/math.h:380:1: warning:
 this is the location of the previous definition
In file included from mysql.cpp:2:
C:\\C++\\mysql\\include\\my_global.h:1007:2: #error Neither int or long is of 4
bytes width
In file included from mysql.cpp:2:
C:\\C++\\mysql\\include\\my_global.h: In function `double rint(double)':
C:\\C++\\mysql\\include\\my_global.h:1583: error: redefinition of `double rint(d
ouble)'
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/math.h:636: error: `do
uble rint(double)' previously defined here
C:\\C++\\mysql\\include\\my_global.h:1593: error: `DBL_MANT_DIG' was not declare
d in this scope
C:\\C++\\mysql\\include\\my_global.h:1597: error: `DBL_MANT_DIG' was not declare
d in this scope

Meus includes:

#include <C:\\C++\\mysql\\include\\my_global.h>
#include "C:\\C++\\mysql\\include\\mysql.h"
#include <string.h>
#include <stdio.h>

Aff, estou completamente perdido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que linkar na mão a biblioteca. Biblioteca != headers.

Se a biblioteca não está no diretório padrão, você tem que especificar isso na hora de compilar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" "lib/libmysql.lib"  mysql.cpp -o mysql
Não é?

 

Gera o mesmo erro inicial:

C:\DOCUME~1\neto\CONFIG~1\Temp/ccgLbaaa.o:mysql.cpp:(.text+0x32): undefined reference to `mysql_init@4'
C:\DOCUME~1\neto\CONFIG~1\Temp/ccgLbaaa.o:mysql.cpp:(.text+0x79): undefined reference to `mysql_real_connect@32'
C:\DOCUME~1\neto\CONFIG~1\Temp/ccgLbaaa.o:mysql.cpp:(.text+0x96): undefined reference to `mysql_error@4'
collect2: ld returned 1 exit status

Tentei a biblioteca libmysql.lib e a lmysqlclient.lib. Ambas dá na mesma. Como faço para linkar várias? Preciso indicar uma a uma?

 

 

Edit: FOOOOOOIIII... EEEEE. Era algo que não esperava, a ordem dos parâmetros passados para compilar fazem diferença.

Estava tentando:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" "lib/libmysql.lib" mysql.cpp -o mysql

Mas deu certo quando fiz:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" mysql.cpp "lib/libmysql.lib" -o mysql

 

Muito obrigado Isis. Que Deus a abençoe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltando ao link do GCC que eu colei:

 

To enable the compiler to link the sqrt function to the main program ‘calc.c’ we need to supply the library ‘libm.a’. One obvious but cumbersome way to do this is to specify it explicitly on the command line:

 

$ gcc -Wall calc.c /usr/lib/libm.a -o calc

The library ‘libm.a’ contains object files for all the mathematical functions, such as sin, cos, exp, log and sqrt. The linker searches through these to find the object file containing the sqrt function.

 

Once the object file for the sqrt function has been found, the main program can be linked and a complete executable produced:

 

$ ./calc

The square root of 2.0 is 1.414214

The executable file includes the machine code for the main function and the machine code for the sqrt function, copied from the corresponding object file in the library ‘libm.a’.

 

To avoid the need to specify long paths on the command line, the compiler provides a short-cut option ‘-l’ for linking against libraries. For example, the following command,

 

$ gcc -Wall calc.c -lm -o calc

is equivalent to the original command above using the full library name ‘/usr/lib/libm.a’.

 

In general, the compiler option -lNAME will attempt to link object files with a library file ‘libNAME.a’ in the standard library directories. Additional directories can specified with command-line options and environment variables, to be discussed shortly. A large program will typically use many -l options to link libraries such as the math library, graphics libraries and networking libraries.

 

 

 

 

 

A biblioteca está num diretório padrão pro mingw? Se não está não adianta simplesmente escrever o nome do arquivo. E mesmo que estivesse provavelmente precisaria linkar na mão também, como acontece com math.h. Pra isso servem as opções de pesquisa em diretórios lá do link da Red Hat que eu colei uns posts atrás.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você acabou postando antes de salvar minha edição, deixa eu escrever de novo senão capaz que nem perceba que alterei:

 

Edit: FOOOOOOIIII... EEEEE. Era algo que não esperava, a ordem dos parâmetros passados para compilar fazem diferença.

Estava tentando:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" "lib/libmysql.lib" mysql.cpp -o mysql

Mas deu certo quando fiz:

C:\C++\mysql>g++ -I./"C:\C++\mysql\include" mysql.cpp "lib/libmysql.lib" -o mysql

 

Muito obrigado Isis. Que Deus a abençoe...

 

PS: Eu não estava pegando da biblioteca padrão MinGW, a pasta include e a lib estão na pasta raiz do meu programa. Fiz uma cópia da pasta que está em arquivos de programas. Só para facilitar minha procura, depois, como sei que isso não é necessário, deixo somente a original mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.