Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gente.. cheguei a conclusão que é impossivel instalar o ZEOS no Delphi 7 (pelo menos no meu)... não consegui encontrar o "segredo" da instalação.. então resolvi fazer sem ele mesmo.. consegui.. e fuciono bem, usando o componente SQLconnection e SQLQuery da paleta dbExpress (apenas esses dois) e tratei os resultados vindos do banco no braço... bom.. ai resolvi então criar uma dll e colocar isso tudo dentro.. bom, primeira vez que eu fiz, funcionou que chego dá gosto de ver.. ai fiz algumas alterações, ai começou a surgir uma mensagem de "invalid operation pointer"..
É uma mensagem muito estranha, por que se eu chamo a função sem nenhum "messagebox" dentro a função nem entra, ja se eu colocar uns "messagebox" ela vai ate o final e então da o erro.. alguem sabe me dizer como resolver isso
o codigo da biblioteca vai abaixo
library Project2;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
Variants, Classes, SqlExpr;
{$R *.res}
type
Matriz_Resultado= array of array of variant;
var
conexao : TSQLConnection;
query: TSQLQuery;
cn_database: string;
//funções
function conectar(PUsuario, PSenha, PDatabase: string; PHost: string = 'localhost'; PLibraryName: string = 'dbxopenmysql50.dll'; PVendorLib: string = 'libmysql.dll'): boolean; export;
begin
try
conexao := TSQLConnection.Create(nil);
conexao.ConnectionName := 'teste';
conexao.DriverName := 'MySQL50';
conexao.GetDriverFunc := 'getSQLDriverMYSQL50';
conexao.LibraryName := PLibraryName;
conexao.Params.add('DriverName=MySQL50');
conexao.Params.add('HostName='+PHost);
conexao.Params.add('Database='+PDatabase);
conexao.Params.add('User_Name='+PUsuario);
conexao.Params.add('Password='+PSenha);
conexao.Params.add('BlobSize=-1');
conexao.Params.add('ErrorResourceFile=');
conexao.Params.add('LocaleCode=0000');
conexao.VendorLib := PVendorLib;
conexao.LoginPrompt := false;
//conexao.SQLConnection.connect(pchar(PHost), pchar(PUsuario), pchar(PSenha));
//conexao.Connected := true;
conexao.Open;
query := TSQLQuery.Create(query);
query.MaxBlobSize := -1;
query.SQLConnection := conexao;
query.SQL.Clear;
Result := true;
except
Result := false;
end;
end;
function Select(Tabela: string; Condicao: string; Colunas: string = '*'):Matriz_resultado; export; cont, cont2 : integer;
Nome_Colunas : TStringList; query.SQL.Clear;
query.SQL.Add('SELECT '+Colunas+' FROM '+Tabela+' '+Condicao);
//query.SQL.Add('SELECT * FROM produtos');
query.ExecSQL(true);
query.Active := true;
Nome_Colunas := TStringList.Create;
Nome_Colunas.Clear;
query.GetFieldNames(Nome_Colunas);
setLength(Result, Nome_Colunas.Count+1);
//pegar o cabeçalho
for cont := 0 to Nome_Colunas.Count-1 do begin
setLength(Result[cont+1], 2);
Result[cont+1, 1] := Nome_Colunas[cont];
end;
//pegar os registros
for cont := 1 to Nome_Colunas.Count do begin
setLength(Result[cont], query.RowsAffected+2);
query.First;
for cont2 := 1 to query.RowsAffected-1 do begin
Result[cont, cont2+1] := query.Fields[0].DataSet.FieldValues[Nome_Colunas[cont-1]];
query.Next;
end;
end;
end;
exports
Conectar, Select;
//Implementação
begin
end.
O probelma é na funcção "Select". a função "conectar" funciona bem
eu fiz um programa que funciou (em parte, executava so uma vez a "Select"), mas depois, tentei fazer outro igual e não adintou mais.. so da erroNão funcionou.. mas ja arumei o codigo pra deixar so o query.open.
valeus.. ainda to procurando a resposta
Bom, ainda procuro pela resposta.
Esqueci de falar uma coisa.. se eu colocar estas funções no form do projeto mesmo, elas funcionam superbem e sem nem sinal de erro
Já verificou se sua query está realmente conectada ao BD quando chama o código via dll? Talvez seja necessário conectar ela antes do BD via dll antes do open.
[]'s
[]'s