Quier hacer una conexión con SQL server en Delphi pero me sale un mensaje de "access violation".

Estoy en un apuro. El problema que tengo es el siguiente: Tengo una aplicación principal, que llama a una serie de dll's.
El problema esta en que en una de ellas quiero establecer un enlace ADOConection con el servidor de SQL server y me da una excepción de "access violation", esto no solo me pasa con este componente, también me ocurre con otra dll, en la que he colocado un ServerSocket i me ignora los paquetes que le llegan, parece que se conecta pero no hace nada. Los dos problemas son graves pues no puedo ni leer los sockets ni crear la conexión ado.
Si me pudieras explicar como solucionarlo o tienes algún pequeño ejemplo te lo agradecería, pues estoy en un apuro importante.

6 Respuestas

Respuesta
1
Es difícil decirte por que puede estar fallando el enlace sin tener aquí las mismas condiciones para poder repetir el error. De todas formas, los problemas de 'access violation', al menos según mi experiencia, se deben casi siempre a intentos de acceder a objetos que NO han sido aun creados, o que ya han sido destruidos. Revisa tu código en este sentido, quizás sea algo de esto
Suerte
Gracias por la respuesta. ¿No tienes ningún ejemplo en el que crees un enlace a una base de datos sql server con adoconection o database?
Gracias de nuevo
Esto esta cortado de una unit nuestra, no esta completo (solo la parte que interesa) y tendrás que adaptarlo a tu caso en particular
unit uReplaceCharDb;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ValEdit, StdCtrls, ExtCtrls, Buttons, DB, ADODB, ComCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
......
const TIPO = 'Provider=SQLOLEDB.1;';
password ='Password=';
user = ';Persist Security Info=False;User ID=';
initial =';Initial Catalog=';
server=';Data Source=';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with ADOConnection1 do begin
close;
conexion :=TIPO+password+trim(edPassWord.text)+user+trim(edUserName.text)+initial+'master'+server+trim(edServerName.text)+';';
ConnectionString := conexion;
try
lbinfo.Caption := 'verifing conection...';
lbinfo.Repaint;
Application.ProcessMessages;
open;
ADOQuery1.sql.Clear;
ADOQuery1.sql.Add('sp_databases');
try
lbinfo.Caption := 'Import Databasenames...';
lbinfo.Repaint;
Application.ProcessMessages;
ADOQuery1.open;
ADOQuery1.first;
while not ADOQuery1.eof do begin
if (ADOQuery1.fieldbyname('database_name').asstring<> 'master') and
(ADOQuery1.fieldbyname('database_name').asstring<> 'model') and
(ADOQuery1.fieldbyname('database_name').asstring<> 'msdb') then
lbDATABASES.Items.Add(ADOQuery1.fieldbyname('database_name').asstring);
ADOQuery1.Next;
end;
except
end;
BitBtn18.Enabled := lbDATABASES.Items.Count>0;
lbinfo.Caption := '';
except
lbinfo.Caption := 'Conexión FAILED...';
lbinfo.Repaint;
Application.ProcessMessages;
end;
end;
Respuesta
1
Me parece que no voy a ser de mucha ayuda. Solo te puede decir dos cosas:
1) Si la dll comunica strings al programa principal tendría que tener como primer uses el de ShareMem.
2) Podrías poner en depuración el dll. Para esto cargar el proyecto que genera la dll y en el menu Project-Parameters veras que puedes definir la aplicación host (La que llama a la dll). Haciendo esto podrás ver que esta fallando y resolver o bien decirme más cosas.
Respuesta
1
Hi,
Mira, la utilización de DLLs no es mi fuerte. Ya que no se están utilizando mucho y por lo tanto abandone el tema.
Tu problema puede estar al establecer la conexión en el servidor. Los dos componentes que estas utilizando utilizan capacidades de red y por lo tanto estas tienen que estar bien conectadas. Aparentemente, por lo que me comentas las DLLs andan bien pero el problema esta en el Server o en tu conexión de red.
Espero que te haya servido y cualquier consulta que tengas no dudes en preguntarme.
Nahuelon..
Respuesta
1
En realidad aun no me manejo en eso. Pero tuve un problema con una aplicación oracle en la cual también me mandaba al demonio. El error radicaba en la ip de conexión al server, quizás sea eso. ¿Cómo se puede saber? Intenta conectar y hace desde la línea de comandos un netstat -r o netstat -a.
Ahora un error de protección... mmmm también me sucedió con unas dll de impresora (en red) la solución a ello fue volver a instalarla, también asegurate de tener instalado el protocolo Netbeui, porque también cuando este protocolo no estaba instalado en algunos equipon me daba error en red.
Bueno ojala algo de esto pueda ayudarte, o al menos iluminarte un poquitín. =)
Respuesta
-1
Access Violation
Gran error, el problema de este error es que no indica mada en especial, el problema más común que lleva a este error el el hecho de usar un componente, clase, etc. sin crearlo o inicializarlo, te sugiero que revises tu código en busca de este tipo de errores.
Siento no podes ayudarte más pero para ello tendría que tener tu código y revisarlo para localizar el error.
Cualquier cosa pregunta, Atentamente. DX.
PD: No te olvides de finalizar la pregunta.
Respuesta
-1
Las dll's, ¿Las has hecho tu o son de Visual?...
En cuanto la conexión ADO, puede ser que sea problema de que pones bien los argumentos o alguna historia de usuarios. Etc..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas