Ir al contenido


Foto

[RESUELTO] Recursividad: Véase Recursividad (Circular datalinks con MS SQLServer 2000)


  • Por favor identifícate para responder
23 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 09:58

Chavos, tengo un VERDADERO caso para "La Araña"..., procedo a comentarles...

Tengo una base de datos en MS SQLServer 2000, conectada remotamente a una aplicación que estoy "actualizando" y que ahora utiliza ADOConnection, tres ADOTables y sus respectivos DataSource y todos los parámetros que me permiten explotar las tablas..., PEROOOO cuando creo explícitamente el Data Module que los contiene como parte del inicio de mi aplicación. Obviamente ésta se bloquea y no permite iniciar.

Al ver ésto, me pongo a hacer rastreo desde el IDE, y lo simpático del caso es que al activar la base de datos y poner como activa CUALQUIERA de las tablas, se marca el dichoso error. ¿Alguien tiene alguna solución o sugerencia qué hacerme, por favor?
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 09 marzo 2010 - 10:02

Pues cual es el dichoso error?
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 10:21

Cierto, perdón, no lo mencioné.

"Circular datalinks not allowed"
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 10:22

¿ En tiempo de diseño no tienes problema para activar el ADOConnection y las ADOTables ?

Me parece que en alguna tabla tienes una referencia inadecuada ya sea en el dataset o en algún campo lookup.

Salud OS
  • 0

#5 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 10:34

¿ En tiempo de diseño no tienes problema para activar el ADOConnection y las ADOTables ?

Me parece que en alguna tabla tienes una referencia inadecuada ya sea en el dataset o en algún campo lookup.

Salud OS


Desde el diseño está el problema, o más bien, aparece también solamente que no se "cuelga" Delphi. Lo interesante es que ya revisé las tablas, la conexión al cable, la máquina donde reside la base de datos, la instalación de SQL Server y de Delphi..., y a pesar que todo está correcto, el error aparece continuamente.
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 10:43


¿ En tiempo de diseño no tienes problema para activar el ADOConnection y las ADOTables ?

Me parece que en alguna tabla tienes una referencia inadecuada ya sea en el dataset o en algún campo lookup.

Salud OS


Desde el diseño está el problema, o más bien, aparece también solamente que no se "cuelga" Delphi. Lo interesante es que ya revisé las tablas, la conexión al cable, la máquina donde reside la base de datos, la instalación de SQL Server y de Delphi..., y a pesar que todo está correcto, el error aparece continuamente.


¿ Algún Firewall, Proxie, AV que esté bloqueando la conexión ?

Salud OS
  • 0

#7 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 10:45

¿ Algún Firewall, Proxie, AV que esté bloqueando la conexión ?


No hay nada..., es más, se eliminó todo aquéllo que pudiera interferir..., te digo que hasta el cableado revisamos, así de paranoide me puse.
  • 0

#8 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 10:52

Añado más datos...



delphi
  1. [5067E82C]{dbrtl140.bpl} DB.DatabaseError (Line 2885, "DB.pas" + 3) + $E
  2. [50D44E12]{vcldb140.bpl} DBCtrls.TDBLookupControl.CheckNotCircular (Line 4492, "dbctrls.pas" + 2) + $12
  3. [50D451AF]{vcldb140.bpl} DBCtrls.TDBLookupControl.UpdateListFields (Line 4586, "dbctrls.pas" + 7) + $3
  4. [50D4736B]{vcldb140.bpl} DBCtrls.TDBLookupComboBox.KeyValueChanged (Line 5484, "dbctrls.pas" + 16) + $15
  5. [50D47385]{vcldb140.bpl} DBCtrls.TDBLookupComboBox.UpdateListFields (Line 5488, "dbctrls.pas" + 1) + $2
  6. [50D44B74]{vcldb140.bpl} DBCtrls.TListSourceLink.ActiveChanged (Line 4421, "dbctrls.pas" + 1) + $B
  7. [5068C421]{dbrtl140.bpl} DB.TDataLink.SetActive (Line 9337, "DB.pas" + 5) + $4
  8. [5068C450]{dbrtl140.bpl} DB.TDataLink.UpdateState (Line 9352, "DB.pas" + 1) + $15
  9. [5068C56E]{dbrtl140.bpl} DB.TDataLink.DataEvent (Line 9413, "DB.pas" + 1) + $7
  10. [5068CBB7]{dbrtl140.bpl} DB.TDataSource.NotifyLinkTypes (Line 9703, "DB.pas" + 4) + $9
  11. [5068CBE6]{dbrtl140.bpl} DB.TDataSource.NotifyDataLinks (Line 9710, "DB.pas" + 3) + $8
  12. [5068C9E7]{dbrtl140.bpl} DB.TDataSource.SetState (Line 9632, "DB.pas" + 5) + $6
  13. [5068CA32]{dbrtl140.bpl} DB.TDataSource.UpdateState (Line 9645, "DB.pas" + 1) + $A
  14. [5068CC00]{dbrtl140.bpl} DB.TDataSource.DataEvent (Line 9715, "DB.pas" + 1) + $7
  15. [5069286D]{dbrtl140.bpl} DB.TDataSet.DataEvent (Line 12157, "DB.pas" + 36) + $14
  16. [50D01FCC]{adortl140.bpl} ADODB.TCustomADODataSet.DataEvent (Line 3935, "ADODB.pas" + 9) + $6
  17. [5069084C]{dbrtl140.bpl} DB.TDataSet.SetState (Line 11160, "DB.pas" + 5) + $6
  18. [50690D5F]{dbrtl140.bpl} DB.TDataSet.OpenCursorComplete (Line 11335, "DB.pas" + 7) + $5
  19. [50690C8F]{dbrtl140.bpl} DB.TDataSet.SetActive (Line 11306, "DB.pas" + 15) + $3
  20. [50690CD3]{dbrtl140.bpl} DB.TDataSet.SetActive (Line 11313, "DB.pas" + 22) + $E
  21. [5005164A]{rtl140.bpl  } TypInfo.SetOrdProp (Line 1723, "TypInfo.pas" + 27) + $0
  22. [20D95FB6]{designide140.bpl} DesignEditors.TPropertyEditor.SetOrdValue (Line 841, "DesignEditors.pas" + 2) + $E
  23. [20DDB035]{designide140.bpl} VCLEditors.TBooleanProperty.MouseUp (Line 1838, "VCLEditors.pas" + 5) + $10
  24. [20EAFF1D]{vclide140.bpl} PropBox.TCustomPropListBox.ItemMouseUp (Line 1625, "propbox.pas" + 16) + $1B
  25. [20EB0113]{vclide140.bpl} PropBox.TCustomPropListBox.MouseUp (Line 1690, "propbox.pas" + 1) + $D
  26. [5029679C]{vcl140.bpl  } Controls.TControl.DoMouseUp (Line 7306, "Controls.pas" + 2) + $28
  27. [50296818]{vcl140.bpl  } Controls.TControl.WMLButtonUp (Line 7319, "Controls.pas" + 9) + $6
  28. [20EB5758]{vclide140.bpl} IDEInspListBox.TInspListBox.WMLButtonUp (Line 1615, "IDEInspListBox.pas" + 3) + $4
  29. [50295DFC]{vcl140.bpl  } Controls.TControl.WndProc (Line 7062, "Controls.pas" + 91) + $6
  30. [50299F53]{vcl140.bpl  } Controls.TWinControl.IsControlMouseMsg (Line 9596, "Controls.pas" + 1) + $9
  31. [5029A6C0]{vcl140.bpl  } Controls.TWinControl.WndProc (Line 9819, "Controls.pas" + 144) + $6
  32. [501F073C]{vcl140.bpl  } StdCtrls.TCustomListBox.WndProc (Line 6130, "StdCtrls.pas" + 37) + $4
  33. [50299D60]{vcl140.bpl  } Controls.TWinControl.MainWndProc (Line 9540, "Controls.pas" + 3) + $6
  34. [50076360]{rtl140.bpl  } Classes.StdWndProc (Line 13014, "Classes.pas" + 8) + $0
  35. [502C8749]{vcl140.bpl  } Forms.TApplication.ProcessMessage (Line 9784, "Forms.pas" + 30) + $1
  36. [502C878E]{vcl140.bpl  } Forms.TApplication.HandleMessage (Line 9814, "Forms.pas" + 1) + $4
  37. [502C8AB9]{vcl140.bpl  } Forms.TApplication.Run (Line 9951, "Forms.pas" + 26) + $3
  38. [0042D94A]{bds.exe    } bds.bds (Line 200, "" + 8) + $FFFB



Ésto es el "dump" del error que me marca EN TIEMPO DE DISEÑO cuando pongo Active := True las tablas. Aparentemente NO QUEDAN ACTIVAS, pero al quitarles y devolverles el foco, ¡¡¡SORPRESAAAAAA!!!, están con el checkbox de "Active" con su respectiva marca.
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 10:59

Yo haría un test tabla por tabla para ver en cual de ellas está surgiendo el error, si es en cualquiera tendrás un problema en el string de la conexión, no veo porque te esté bloqueando el sistema.

Salud OS
  • 0

#10 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 11:22

Yo haría un test tabla por tabla para ver en cual de ellas está surgiendo el error, si es en cualquiera tendrás un problema en el string de la conexión...


De hecho el error surge en CASI TODAS las tablas, excepto en UNA que tengo fuera del Data Module en una forma que la usa en exclusiva.

Ya revisé la cadena de conexión y el problema continúa presentándose; creo finalmente que tendré que hacerlo todo por ADOQuery's, ya que éstos hasta el momento no han fallado.
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 11:34

Me parece entonces que deberías crear otro datamodule y pasar una por una de las tablas, tal vez hay algo en ese datamodule que está afectando.

Salud OS
  • 0

#12 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 11:39

Me parece entonces que deberías crear otro datamodule y pasar una por una de las tablas, tal vez hay algo en ese datamodule que está afectando


Pues a menos que sea el "dialogs" en el uses, no le veo mucho que esté afectando...



delphi
  1. unit Udatos;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, Classes, DB, DBTables, bde, ADODB, Dialogs;
  7.  
  8. type
  9.   TDatos = class(TDataModule)
  10.     Dstipoofi: TDataSource;
  11.     Dsoficinas: TDataSource;
  12.     DSdelega: TDataSource;
  13.     Dsconsulta: TDataSource;
  14.     ADOCnnctn: TADOConnection;
  15.     tbltipoofi: TADOTable;
  16.     tbloficinas: TADOTable;
  17.     tbldelega: TADOTable;
  18.     qryconsulta: TADOQuery;
  19.     tbltipoofiClave: TIntegerField;
  20.     tbltipoofiConcepto: TStringField;
  21.     procedure DataModuleCreate(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.   end;
  27.  
  28. var
  29.   Datos: TDatos;
  30.  
  31. implementation
  32.  
  33. {$R *.dfm}
  34.  
  35. procedure TDatos.DataModuleCreate(Sender: TObject);
  36. begin
  37.   try
  38.     ADOCnnctn.Connected := True;
  39.   except
  40.     MessageDlg('Base de datos no accesible.', mtError, [mbOK], 0);
  41.   end;
  42.  
  43.   tbltipoofi.Active := True;
  44.  
  45.   tbloficinas.Active := True;
  46. (*
  47.   tbldelega.Active := True;*)
  48. end;
  49.  
  50. end.



Como pueden ver, está CASI vacío, gracias a qué ese condenado error incachable no me ha dejado avanzar más... : : :| :|
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 09 marzo 2010 - 11:42

Estás creando en tiempo de ejecución los forms o todos son autocreated, quiero decir, si abres una tabla que tiene enlace a una forma que no está creada vas a tener problemas, en este tipo de errores, solo sirven dos cosas

1. Hacer nuevo el proyecto
2. Prueba y error.

Salud OS
  • 0

#14 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 11:47

.
.
.
1. Hacer nuevo el proyecto
2. Prueba y error.
.
.


3. Cambiar los componentes que están "fallando".

Y sí, optaré por la tercera vía, ya que el tiempo que me asignaron no me permitirá rehacer TODO el proyecto completo, mucho menos hacer pruebas para detectar por dónde está el problema. Voy a dar el tema como cubierto, pero si alguien tiene alguna idea, hágamela saber.
  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 marzo 2010 - 11:48

Hola
El problema esta en el proyecto, cuando le incorporaste el Datamodule no empieza primero, por esta razon no abre las tablas, no hay conexión.
Puede ser el orden de inicio del proyecto, para mi es lo mas lógico.
No deberia enviar error ni siquiera mostrar el mensaje ya que simplemente no llega hasta ahi.
Otra cosa a tomar en cuenta: El adoConnection esta enlazado a SQLServer por el mismo, si cambia la direccion por x razon no lo encontrara.
Saludos
PD: Como me gusta ADO. jejeje

  • 0

#16 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 11:54

...
El problema esta en el proyecto, cuando le incorporaste el Datamodule no empieza primero, por esta razon no abre las tablas, no hay conexión...


Pues algo así me encontré yo..., hasta que modifiqué el orden de creación.


delphi
  1. program Pdirectorio;
  2.  
  3. uses
  4.   Forms,
  5.   windows,
  6.   dialogs,
  7.   Umenu in '..\formas\Umenu.pas' {frminicio},
  8.   Uacerca in '..\formas\Uacerca.pas' {AboutBox},
  9.   Ucatofi in '..\formas\Ucatofi.pas' {Frmcatofi},
  10.   Ucaptura in '..\formas\Ucaptura.pas' {frmcaptura},
  11.   Udatos in '..\formas\Udatos.pas' {Datos: TDataModule},
  12.   Ucatdel in '..\formas\Ucatdel.pas' {frmcatdel},
  13.   Uconsulta in '..\formas\Uconsulta.pas' {Frmconsulta},
  14.   Uinicio in '..\formas\Uinicio.pas' {Frmpassword},
  15.   Ulectura in '..\formas\Ulectura.pas' {frmsololectura},
  16.   Ubusca in '..\formas\Ubusca.pas' {frmbusca};
  17.  
  18. {$R *.res}
  19. const NombreMutex='Tu aplicación';
  20.  
  21. Var Mimutex:Thandle;
  22.  
  23. begin
  24.  
  25.   mimutex:= createmutex(nil,true,nombremutex);
  26.   if mimutex=0 then begin
  27.     Showmessage('Error creando mutex');
  28.     halt;
  29.   end;
  30.   if getlasterror=ERROR_ALREADY_EXISTS then begin
  31.     Showmessage('Ya está funcionando la aplicación');
  32.     halt;
  33.   end;
  34.  
  35.   Application.Initialize;
  36.   Application.CreateForm(TDatos, Datos);
  37.   Application.CreateForm(TFrmpassword, Frmpassword);
  38.   Application.CreateForm(Tfrminicio, frminicio);
  39.   Application.CreateForm(TAboutBox, AboutBox);
  40.   Application.CreateForm(TFrmcatofi, Frmcatofi);
  41.   Application.CreateForm(Tfrmcaptura, frmcaptura);
  42.   Application.CreateForm(Tfrmcatdel, frmcatdel);
  43.   Application.CreateForm(TFrmconsulta, Frmconsulta);
  44.   Application.CreateForm(Tfrmsololectura, frmsololectura);
  45.   Application.CreateForm(Tfrmbusca, frmbusca);
  46.   Application.Run;
  47.   closehandle(mimutex);
  48.  
  49. end.



Aclaro. Éste código no es mío, por lo que cualquier "error" generado por el sistema se hace evidente cuando comienzo a modernizarlo.
  • 0

#17 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 marzo 2010 - 12:00

Hola
Yo quitaría un montón de cosas del inicio, pero ya saben......
Intenta esto:


delphi
  1. unit Udatos;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, Classes, DB, DBTables, bde, ADODB, Dialogs;
  7.  
  8. type
  9.   TDatos = class(TDataModule)
  10.     Dstipoofi: TDataSource;
  11.     Dsoficinas: TDataSource;
  12.     DSdelega: TDataSource;
  13.     Dsconsulta: TDataSource;
  14.     ADOCnnctn: TADOConnection;
  15.     tbltipoofi: TADOTable;
  16.     tbloficinas: TADOTable;
  17.     tbldelega: TADOTable;
  18.     qryconsulta: TADOQuery;
  19.     tbltipoofiClave: TIntegerField;
  20.     tbltipoofiConcepto: TStringField;
  21.     procedure DataModuleCreate(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.   end;
  27.  
  28. var
  29.   Datos: TDatos;
  30.  
  31. implementation
  32.  
  33. {$R *.dfm}
  34.  
  35. procedure TDatos.DataModuleCreate(Sender: TObject);
  36. begin
  37.   try
  38.     ADOCnnctn.Open;
  39.   except
  40.     MessageDlg('Base de datos no accesible.', mtError, [mbOK], 0);
  41.   end;
  42.   ShowMessage('ya toy');
  43.  
  44.   // tbltipoofi.Active := True;
  45.   // tbloficinas.Active := True;
  46.   //(*
  47.   // tbldelega.Active := True;*)
  48. end;
  49.  
  50. end.


Saludos
  • 0

#18 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 12:07

Yo quitaría un montón de cosas del inicio, pero ya saben...


Yo también, pero como comenté, estoy "modernizando" un código que no es mío y estamos de acuerdo que ésa actividad es la peor que le puedes poner a un programador. Meterse a la cabeza y la lógica de otro programador muchas veces es complicado.



delphi
  1. .
  2. .
  3. .
  4.   ShowMessage('ya toy');
  5. .
  6. .
  7. .



Realizado..., y se conecta de perlas. El problema (creo que ya lo estoy "arrinconando") es una combinación de una mala versión del cliente de MSSQLSrvr y el motor de base de datos. He escuchado algunas malas críticas respecto a la eficiencia de SQLServer 2000, y creo que las estoy afirmando.
  • 0

#19 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 09 marzo 2010 - 12:11

Hola
Antes de cantar victoria yo intentaria esto:


delphi
  1. procedure TDatos.DataModuleCreate(Sender: TObject);
  2. begin
  3.   try
  4.     ADOCnnctn.Open;
  5.     ShowMessage('ya toy');
  6.  
  7.   except
  8.     MessageDlg('Base de datos no accesible.', mtError, [mbOK], 0);
  9.   end;
  10.  
  11.   // tbltipoofi.Active := True;
  12.   // tbloficinas.Active := True;
  13.   //(*
  14.   // tbldelega.Active := True;*)
  15. end;


Después analizar donde estan estos adotables o querys posteriores que se quieren activar.
Saludos
  • 0

#20 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 09 marzo 2010 - 12:19



delphi
  1. .
  2. .
  3. .
  4.     ADOCnnctn.Open;
  5.     ShowMessage('ya toy');
  6. .
  7. .
  8. .


Después analizar donde estan estos adotables o querys posteriores que se quieren activar.


Realizado..., y el resultado es satisfactorio totalmente, es decir, se conecta la base de datos y avisa.

Entre otras cosas, estoy monitoreando hasta el tipo de dato que compone las columnas de las tablas, por si ése fuera alguna especie de desencadenante del error.
  • 0




IP.Board spam blocked by CleanTalk.