Ir al contenido



Foto

Mensaje Conflicto entre tablas, Migración Query a ADOQuery

adoquery mysql delphi

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

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 09:40

Buen dia .. tengo un detalle .... anterior mente usaba el siguiente código con el componente Query y me funcionaba muy bien sin problemas, usando en aquel entonces tablas paradox..
 

delphi
  1. with QueryRegONT do // Busqueda por Modelo y Tipo
  2. begin
  3. Close;
  4. SQL.Clear;
  5. // ------------------------------------------------------------
  6. // Se ultilizó el PArametro JOIN para unir las otras Tablas
  7. // relacionando el Campo FOLIO en todas ellas siempre y cuando
  8. // Se cumpliera la condicion de busqueda del ONT ya registrado.
  9. // ------------------------------------------------------------
  10. SQL.Add('SELECT * FROM CTRLONT.db CTRL ');
  11. SQL.Add('join CLIENTES.db CL on CTRL.FOLIO = CL.FOLIO ');
  12. SQL.Add('join ONT.db ONT on CTRL.FOLIO = ONT.Folio ');
  13. SQL.Add('WHERE BOARD_ONT=:BOARD_ONT');
  14. SQL.Add(' AND FRAME_ID=:FRAME_ID');
  15. SQL.Add(' AND SLOT_ID=:SLOT_ID');
  16. SQL.Add(' AND PORT_ID=:PORT_ID');
  17. SQL.Add(' AND ONT_ID=:ONT_ID');
  18.  
  19. // --------------------------------------------------------
  20. // Valores de búsqueda para el registro de Cliente.
  21. // --------------------------------------------------------
  22. ParamByName('BOARD_ONT').AsInteger := StrToInt(Edit1.Text);
  23. ParamByName('FRAME_ID').AsInteger := StrToInt(Edit2.Text);
  24. ParamByName('SLOT_ID').AsInteger := StrToInt(Edit3.Text);
  25. ParamByName('PORT_ID').AsInteger := StrToInt(Edit4.Text);
  26. ParamByName('ONT_ID').AsInteger := StrToInt(Edit5.Text);
  27. Open;
  28. if QueryRegONT.IsEmpty then
  29. Begin
  30. msError('El ONT no se encuentra registrado, porfavor verifica los datos.','No existe Datos..');
  31. exit;
  32. End
  33. Else
  34. Begin
  35. F:= QueryRegONT.FieldByName('FOLIO').AsInteger;
  36. // -------------------
  37. with QueryCL do // Busqueda por Modelo y Tipo
  38. begin
  39. Close;
  40. SQL.Clear;
  41. SQL.Add('SELECT * FROM CLIENTES.db ');
  42. SQL.Add('WHERE FOLIO=:FOLIO');
  43. ParamByName('FOLIO').AsInteger :=F;
  44. Open;
  45. end;
  46. with QueryONT do // Busqueda por Modelo y Tipo
  47. begin
  48. Close;
  49. SQL.Clear;
  50. SQL.Add('SELECT * FROM ONT.db ');
  51. SQL.Add('WHERE FOLIO=:FOLIO');
  52. ParamByName('FOLIO').AsInteger :=F;
  53. Open;
  54. end;
  55. // -------------------
  56. Bok.Enabled := True;
  57. BBuscar.Enabled := False;
  58. DesactivarCampos([Edit1,Edit2,Edit3,Edit4,Edit5]);
  59. End;
  60. end;

Ahora el mismo código lo intenté migrar al componente ADOQuery ya que ahora estoy trabajando con tablas Mysql y lo tengo de esta forma:


delphi
  1. with ADOQueryCtrlONT do // Busqueda por Modelo y Tipo
  2. begin
  3. Close;
  4. SQL.Clear;
  5. // ------------------------------------------------------------
  6. // Se ultilizó el PArametro JOIN para unir las otras Tablas
  7. // relacionando el Campo FOLIO en todas ellas siempre y cuando
  8. // Se cumpliera la condicion de busqueda del ONT ya registrado.
  9. // ------------------------------------------------------------
  10. SQL.Add('SELECT * FROM CTRLONT CTRL ');
  11. SQL.Add('join CLIENTES CL on CTRL.FOLIO = CL.FOLIO ');
  12. SQL.Add('join ONTs ONT on CTRL.FOLIO = ONT.Folio ');
  13. SQL.Add('WHERE BOARD_ONT= :BOARD_ONT');
  14. SQL.Add(' AND FRAME_ID= :FRAME_ID');
  15. SQL.Add(' AND SLOT_ID= :SLOT_ID');
  16. SQL.Add(' AND PORT_ID= :PORT_ID');
  17. SQL.Add(' AND ONT_ID= :ONT_ID');
  18.  
  19. // --------------------------------------------------------
  20. // Valores de búsqueda para el registro de Cliente.
  21. // --------------------------------------------------------
  22. Parameters.ParamByName('BOARD_ONT').Value := Edit1.Text;
  23. Parameters.ParamByName('FRAME_ID').Value := Edit2.Text;
  24. Parameters.ParamByName('SLOT_ID').Value := Edit3.Text;
  25. Parameters.ParamByName('PORT_ID').Value := Edit4.Text;
  26. Parameters.ParamByName('ONT_ID').Value := StrToInt(Edit5.Text);
  27. Open;
  28. if ADOQueryCtrlONT.IsEmpty then
  29. Begin
  30. msError('El ONT no se encuentra registrado, por favor verifica los datos.','No existe Datos..');
  31. exit;
  32. End
  33. Else
  34. Begin
  35. F:= ADOQueryCtrlONT.FieldByName('FOLIO').Value;
  36. // -------------------
  37. with ADOQueryCL do // Busqueda por Modelo y Tipo
  38. begin
  39. Close;
  40. SQL.Clear;
  41. SQL.Add('SELECT * FROM CLIENTES ');
  42. SQL.Add('WHERE FOLIO= :FOLIO');
  43. Parameters.ParamByName('FOLIO').Value :=F;
  44. Open;
  45. end;
  46. with ADOQueryONT do // Busqueda por Modelo y Tipo
  47. begin
  48. Close;
  49. SQL.Clear;
  50. SQL.Add('SELECT * FROM ONTs ');
  51. SQL.Add('WHERE FOLIO= :FOLIO');
  52. Parameters.ParamByName('FOLIO').Value :=F;
  53. Open;
  54. end;
  55. // -------------------
  56. Bok.Enabled := True;
  57. BBuscar.Enabled := False;
  58. DesactivarCampos([Edit1,Edit2,Edit3,Edit4,Edit5]);
  59. End;
  60. end;

Al ejecutarlo me marca un mensaje de error que dices asi:
 
"Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otro"
 
El compilador no marca error y prácticamente estoy usando el mismo código con el que si me funcionaba, saben cual podría ser el error?
 
El error lo manda cuando llega a esta línea:
 

delphi
  1. SQL.Add('WHERE BOARD_ONT=:BOARD_ONT');


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.050 mensajes
  • LocationRepública Dominicana

Escrito 31 enero 2017 - 11:00

Ahora mismo no tengo como probar, pero prueba separar los "=" en los parámetros, prueba cambiar los nombres de los parámetros ya que son exactamente iguales al campo.

Saludos.
  • 0

#3 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 11:14

Ahora mismo no tengo como probar, pero prueba separar los "=" en los parámetros, prueba cambiar los nombres de los parámetros ya que son exactamente iguales al campo.

Saludos.

 

Hice lo que mencionas, pero me sigue el mismo error en la misma línea .. hay algo curioso, quité estas línea para descartar los alias:


delphi
  1. SQL.Add(' AND CTRL.FRAME_ID= :FRAME_ID');
  2. SQL.Add(' AND CTRL.SLOT_ID= :SLOT_ID');
  3. SQL.Add(' AND CTRL.PORT_ID= :PORT_ID');
  4. SQL.Add(' AND CTRL.ONT_ID= :ONT_ID');

Dejandolo de esta forma:


delphi
  1. SQL.Add('SELECT * FROM CTRLONT ');
  2. SQL.Add('WHERE BOARD_ONT= :BOARD');

Pero me sigue mostrando el mismo mensaje de error en la línea donde esta el WHERE.


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.050 mensajes
  • LocationRepública Dominicana

Escrito 31 enero 2017 - 11:18

No veo hayas separado los "=".
  • 0

#5 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 11:22

No veo hayas separado los "=".

 

Disculpa, lo hice y sigue marcando lo mismo.


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 11:58

Lamentablemente el compilador no te va a poder ayudar porque se esta ejecutando un query que es interpretado por el motor de la BD
 
Yo probaria a asignar a cada parametro el tipo correspondiente:


delphi
  1. // TFieldType es un enumerativo definido en la unidad DB (Data.DB si tenes Delphi >= XE2)
  2. ADOQuery1.ParamByName('TuParametro').DataType := TFieldType.ftInteger;

Si tenes acceso a los ayudantes de clases (class helper) podes crearte uno para tener los metodos .AsInteger, .AsString como en los otros componentes de Delphi


delphi
  1. uses
  2. System.DateUtils,
  3. System.Variants,
  4. Data.DB,
  5. Data.Win.ADODB;
  6.  
  7. type
  8. {$REGION 'TADOParameterHelper'}
  9. TADOParameterHelper = class helper for Data.Win.ADODB.TParameter
  10. strict private
  11. function GetAsTime: TTime; inline;
  12. function GetAsDate: TDate; inline;
  13. function GetAsDateTime: TDateTime; inline;
  14. function GetAsInteger: Integer; inline;
  15. function GetAsCurrency: Currency; inline;
  16. function GetAsFloat: Double; inline;
  17.  
  18. procedure SetAsTime(const AValue: TTime); inline;
  19. procedure SetAsDate(const AValue: TDate); inline;
  20. procedure SetAsDateTime(const AValue: TDateTime); inline;
  21. procedure SetAsInteger(const AValue: Integer); inline;
  22. procedure SetAsCurrency(const AValue: Currency); inline;
  23. procedure SetAsFloat(const AValue: Double); inline;
  24. public
  25. property AsTime: TTime read GetAsTime write SetAsTime;
  26. property AsDate: TDate read GetAsDate write SetAsDate;
  27. property AsDateTime: TDateTime read GetAsDateTime write SetAsDateTime;
  28. property AsInteger: Integer read GetAsInteger write SetAsInteger;
  29. property AsCurrency: Currency read GetAsCurrency write SetAsCurrency;
  30. property AsFloat: Double read GetAsFloat write SetAsFloat;
  31. end;
  32. {$ENDREGION}
  33.  
  34. function TADOParameterHelper.GetAsDateTime: TDateTime;
  35. begin
  36. Result := VarToDateTime(Value);
  37. end;
  38.  
  39. function TADOParameterHelper.GetAsCurrency: Currency;
  40. begin
  41. Result := Value;
  42. end;
  43.  
  44. function TADOParameterHelper.GetAsDate: TDate;
  45. begin
  46. Result := DateOf(AsDateTime);
  47. end;
  48.  
  49. function TADOParameterHelper.GetAsTime: TTime;
  50. begin
  51. Result := TimeOf(AsDateTime);
  52. end;
  53.  
  54. function TADOParameterHelper.GetAsFloat: Double;
  55. begin
  56. Result := Value;
  57. end;
  58.  
  59. function TADOParameterHelper.GetAsInteger: Integer;
  60. begin
  61. Result := Value;
  62. end;
  63.  
  64. procedure TADOParameterHelper.SetAsDateTime(const AValue: TDateTime);
  65. begin
  66. DataType := TFieldType.ftDateTime;
  67. Value := VarFromDateTime(AValue);
  68. end;
  69.  
  70. procedure TADOParameterHelper.SetAsCurrency(const AValue: Currency);
  71. begin
  72. DataType := TFieldType.ftCurrency;
  73. Value := AValue;
  74. end;
  75.  
  76. procedure TADOParameterHelper.SetAsDate(const AValue: TDate);
  77. begin
  78. DataType := TFieldType.ftDate;
  79. Value := DateOf(VarFromDateTime(AValue));
  80. end;
  81.  
  82. procedure TADOParameterHelper.SetAsTime(const AValue: TTime);
  83. begin
  84. DataType := TFieldType.ftTime;
  85. Value := TimeOf(VarFromDateTime(AValue));
  86. end;
  87.  
  88. procedure TADOParameterHelper.SetAsFloat(const AValue: Double);
  89. begin
  90. DataType := TFieldType.ftFloat;
  91. Value := AValue;
  92. end;
  93.  
  94. procedure TADOParameterHelper.SetAsInteger(const AValue: Integer);
  95. begin
  96. DataType := TFieldType.ftInteger;
  97. Value := AValue;
  98. end;

Otra cosa que deberias chequear es que coincidan los tipos en la tabla de MySQL, por ahi le erraste a alguna declaracion


Editado por Agustin Ortu, 31 enero 2017 - 12:00 .

  • 0

#7 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 12:04

Lo tengo de esta forma :

 


delphi
  1. Close;
  2. SQL.Clear;
  3. SQL.Add('SELECT * FROM CTRLONT ');
  4. SQL.Add('WHERE BOARD_ONT = :BOARD');
  5. Parameters.ParamByName('BOARD').Value := Edit1.Text;
  6. Open;

Mencionando que el campo BOARD_ONT es de tipo int(11) en la tabla Mysql ya que solo manejo números enteros.

 


  • 0

#8 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 12:21

Lamentablemente el compilador no te va a poder ayudar porque se esta ejecutando un query que es interpretado por el motor de la BD
 
Yo probaria a asignar a cada parametro el tipo correspondiente:


delphi
  1. // TFieldType es un enumerativo definido en la unidad DB (Data.DB si tenes Delphi >= XE2)
  2. ADOQuery1.ParamByName('TuParametro').DataType := TFieldType.ftInteger;

Si tenes acceso a los ayudantes de clases (class helper) podes crearte uno para tener los metodos .AsInteger, .AsString como en los otros componentes de Delphi


delphi
  1. uses
  2. System.DateUtils,
  3. System.Variants,
  4. Data.DB,
  5. Data.Win.ADODB;
  6.  
  7. type
  8. {$REGION 'TADOParameterHelper'}
  9. TADOParameterHelper = class helper for Data.Win.ADODB.TParameter
  10. strict private
  11. function GetAsTime: TTime; inline;
  12. function GetAsDate: TDate; inline;
  13. function GetAsDateTime: TDateTime; inline;
  14. function GetAsInteger: Integer; inline;
  15. function GetAsCurrency: Currency; inline;
  16. function GetAsFloat: Double; inline;
  17.  
  18. procedure SetAsTime(const AValue: TTime); inline;
  19. procedure SetAsDate(const AValue: TDate); inline;
  20. procedure SetAsDateTime(const AValue: TDateTime); inline;
  21. procedure SetAsInteger(const AValue: Integer); inline;
  22. procedure SetAsCurrency(const AValue: Currency); inline;
  23. procedure SetAsFloat(const AValue: Double); inline;
  24. public
  25. property AsTime: TTime read GetAsTime write SetAsTime;
  26. property AsDate: TDate read GetAsDate write SetAsDate;
  27. property AsDateTime: TDateTime read GetAsDateTime write SetAsDateTime;
  28. property AsInteger: Integer read GetAsInteger write SetAsInteger;
  29. property AsCurrency: Currency read GetAsCurrency write SetAsCurrency;
  30. property AsFloat: Double read GetAsFloat write SetAsFloat;
  31. end;
  32. {$ENDREGION}
  33.  
  34. function TADOParameterHelper.GetAsDateTime: TDateTime;
  35. begin
  36. Result := VarToDateTime(Value);
  37. end;
  38.  
  39. function TADOParameterHelper.GetAsCurrency: Currency;
  40. begin
  41. Result := Value;
  42. end;
  43.  
  44. function TADOParameterHelper.GetAsDate: TDate;
  45. begin
  46. Result := DateOf(AsDateTime);
  47. end;
  48.  
  49. function TADOParameterHelper.GetAsTime: TTime;
  50. begin
  51. Result := TimeOf(AsDateTime);
  52. end;
  53.  
  54. function TADOParameterHelper.GetAsFloat: Double;
  55. begin
  56. Result := Value;
  57. end;
  58.  
  59. function TADOParameterHelper.GetAsInteger: Integer;
  60. begin
  61. Result := Value;
  62. end;
  63.  
  64. procedure TADOParameterHelper.SetAsDateTime(const AValue: TDateTime);
  65. begin
  66. DataType := TFieldType.ftDateTime;
  67. Value := VarFromDateTime(AValue);
  68. end;
  69.  
  70. procedure TADOParameterHelper.SetAsCurrency(const AValue: Currency);
  71. begin
  72. DataType := TFieldType.ftCurrency;
  73. Value := AValue;
  74. end;
  75.  
  76. procedure TADOParameterHelper.SetAsDate(const AValue: TDate);
  77. begin
  78. DataType := TFieldType.ftDate;
  79. Value := DateOf(VarFromDateTime(AValue));
  80. end;
  81.  
  82. procedure TADOParameterHelper.SetAsTime(const AValue: TTime);
  83. begin
  84. DataType := TFieldType.ftTime;
  85. Value := TimeOf(VarFromDateTime(AValue));
  86. end;
  87.  
  88. procedure TADOParameterHelper.SetAsFloat(const AValue: Double);
  89. begin
  90. DataType := TFieldType.ftFloat;
  91. Value := AValue;
  92. end;
  93.  
  94. procedure TADOParameterHelper.SetAsInteger(const AValue: Integer);
  95. begin
  96. DataType := TFieldType.ftInteger;
  97. Value := AValue;
  98. end;

Otra cosa que deberias chequear es que coincidan los tipos en la tabla de MySQL, por ahi le erraste a alguna declaracion

 

Desafortunadamente no tengo acceso a lo que menciona y todavia para ser sincero no tengo los conocimientos suficientes para hacer tal tipo de tarea, lo que tengo por ahora es esto .. 


delphi
  1. with ADOQueryCtrlONT.Parameters.AddParameter do
  2. begin
  3. Name := 'BOARD';
  4. DataType := ftInteger;
  5. end;
  6.  
  7. with ADOQueryCtrlONT do // Busqueda por Modelo y Tipo
  8. begin
  9. Close;
  10. SQL.Clear;
  11. SQL.BeginUpdate;
  12. SQL.Add('SELECT * FROM CTRLONT ');
  13. SQL.Add('WHERE BOARD_ONT = :BOARD');
  14. Open;
  15. ...
  16. ..

Pero me sigue mandando el mismo mensaje en la línea donde tiene el WHERE ..


  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 12:42

Aca estas pasando por parametro un string


delphi
  1. Parameters.ParamByName('BOARD').Value := Edit1.Text;

Intenta de esta manera:


delphi
  1. Parameters.ParamByName('BOARD').Value := StrToInt(Edit1.Text);


  • 0

#10 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 01:03

Aca estas pasando por parametro un string
 


delphi
  1. Parameters.ParamByName('BOARD').Value := Edit1.Text;

Intenta de esta manera:


delphi
  1. Parameters.ParamByName('BOARD').Value := StrToInt(Edit1.Text);

 

Lo tengo asi:


delphi
  1. Close;
  2. SQL.Clear;
  3. SQL.Add('SELECT * FROM CTRLONT ');
  4. SQL.Add('WHERE BOARD_ONT = :BOARD');
  5. Parameters.ParamByName('BOARD').Value := StrToInt(Edit1.Text);
  6. Open;

y me manda el mismo error de conflicto en la línea donde se encuentra el WHERE.


  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.050 mensajes
  • LocationRepública Dominicana

Escrito 31 enero 2017 - 01:14

Veamos, en primer qué tipo de datos es Edit1.text?, segundo, veo haces esto: parameters.parambyname.. ¿por qué no simplemente parambyname...?, además de usar .value por qué no mejor mejor de acuerdo al tipo de datos como .AsInteger, AsString, AsFloat, etc..
  • 0

#12 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 01:23

Veamos, en primer qué tipo de datos es Edit1.text?, segundo, veo haces esto: parameters.parambyname.. ¿por qué no simplemente parambyname...?, además de usar .value por qué no mejor mejor de acuerdo al tipo de datos como .AsInteger, AsString, AsFloat, etc..

 

.- Edit1.Text es el campo para un dato tipo entero (número)

.- Estoy usando Delphi7 lo pongo Parameters.ParamByname ya que el mismo sistema no me permite poner solamente ParamByname si antes no le pongo Parameters.

.- Uso e .value ya que de igual forma el sistema no me muestra esos parametros solo .value, imagino que es por el tipo de componente, repito ahora estoy usando un ADOQuery con un componente ADOConnection para conectarme a una Base de Datos Mysql que esta en otro equipo en la red.


  • 0

#13 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 01:39

Veamos, en primer qué tipo de datos es Edit1.text?, segundo, veo haces esto: parameters.parambyname.. ¿por qué no simplemente parambyname...?, además de usar .value por qué no mejor mejor de acuerdo al tipo de datos como .AsInteger, AsString, AsFloat, etc..


TADOQuery funciona de esa manera, no es como FireDAC o como los dbExpress
  • 0

#14 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 01:40


delphi
  1. with ADOQueryCtrlONT.Parameters.AddParameter do
  2. begin
  3. Name := 'BOARD';
  4. DataType := ftInteger;
  5. end;

Este codigo todavia lo tenes? Con solo declarar los parametros dentro de la sentencia SQL ya el componente solo los reconoce, no hace falta que los añadas con codigo


  • 0

#15 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 01:47


delphi
  1. with ADOQueryCtrlONT.Parameters.AddParameter do
  2. begin
  3. Name := 'BOARD';
  4. DataType := ftInteger;
  5. end;

Este codigo todavia lo tenes? Con solo declarar los parametros dentro de la sentencia SQL ya el componente solo los reconoce, no hace falta que los añadas con codigo

 

 

Este es mi procedimiento al consultar para ejecutar lo que requiero ..


delphi
  1. procedure TFConsutaEstatus.BBuscarClick(Sender: TObject);
  2. Var
  3. F : Integer;
  4. begin
  5. // --------------------------------
  6. // Desactivamos Tablas para Busquedas
  7. // --------------------------------
  8. if ADOQueryCtrlONT.Active Then
  9. ADOQueryCtrlONT.Active := False;
  10. // -------
  11. if ADOQueryCL.Active Then
  12. ADOQueryCL.Active := False;
  13. // -------
  14. if ADOQueryONT.Active Then
  15. ADOQueryONT.Active := False;
  16. // -------
  17. // --------------------------------
  18. // Activamos Tablas para Busquedas
  19. // --------------------------------
  20. // Tabla RegONT.db
  21. ADOQueryCtrlONT.Active := True; // Activo la Tabla
  22. // -------
  23. ADOQueryCL.Active := True; // Activo la Tabla
  24. // -------
  25. ADOQueryONT.Active := True; // Activo la Tabla
  26. // -------
  27. // --------------------------------
  28. // --------------------------------
  29.  
  30. // *****************************************
  31. // PROCEDIMIENTO DE BUSQUEDA POR CONDICION
  32. // *****************************************
  33. with ADOQueryCtrlONT.Parameters.AddParameter do
  34. begin
  35. Name := 'BOARD';
  36. DataType := ftInteger;
  37. end;
  38.  
  39. with ADOQueryCtrlONT do // Busqueda por Modelo y Tipo
  40. begin
  41. Close;
  42. SQL.Clear;
  43. SQL.Add('SELECT * FROM CTRLONT ');
  44. SQL.Add('WHERE BOARD_ONT = :BOARD');
  45. Open;
  46. if ADOQueryCtrlONT.IsEmpty then
  47. Begin
  48. msError('El ONT no se encuentra registrado, porfavor verifica los datos.','No existe Datos..');
  49. exit;
  50. End
  51. Else
  52. Begin
  53. F:= ADOQueryCtrlONT.FieldByName('FOLIO').Value;
  54. // -------------------
  55. with ADOQueryCL do // Busqueda por Modelo y Tipo
  56. begin
  57. Close;
  58. SQL.Clear;
  59. SQL.Add('SELECT * FROM CLIENTES ');
  60. SQL.Add('WHERE FOLIO= :FOLIO');
  61. Parameters.ParamByName('FOLIO').Value :=F;
  62. Open;
  63. end;
  64. with ADOQueryONT do // Busqueda por Modelo y Tipo
  65. begin
  66. Close;
  67. SQL.Clear;
  68. SQL.Add('SELECT * FROM ONTs ');
  69. SQL.Add('WHERE FOLIO= :FOLIO');
  70. Parameters.ParamByName('FOLIO').Value :=F;
  71. Open;
  72. end;
  73. // -------------------
  74. Bok.Enabled := True;
  75. BBuscar.Enabled := False;
  76. DesactivarCampos([Edit1,Edit2,Edit3,Edit4,Edit5]);
  77. End;
  78. end;
  79.  
  80. end;

y me sigue enviando el mismo error ..  esto si que es nuevo para mi.


  • 0

#16 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 01:51

Yo sacaria el bloque de codigo de este with


php
  1. with ADOQueryCtrlONT.Parameters.AddParameter do
  2. // etc


  • 0

#17 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 61 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 02:06

 

Yo sacaria el bloque de codigo de este with


php
  1. with ADOQueryCtrlONT.Parameters.AddParameter do
  2. // etc

 

Los puse asi : 


delphi
  1. ADOQueryCtrlONT.Parameters.AddParameter.Name := 'BOARD';
  2. ADOQueryCtrlONT.Parameters.AddParameter.DataType := ftInteger;

y me sigue enviando el mismo mensaje.  :(

 

AL hacer esto ahora me muestra un mensaje que dice .

 

"Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente"


  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.441 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 02:38

Los puse asi : 


delphi
  1. ADOQueryCtrlONT.Parameters.AddParameter.Name := 'BOARD';
  2. ADOQueryCtrlONT.Parameters.AddParameter.DataType := ftInteger;

y me sigue enviando el mismo mensaje.  :(

 

AL hacer esto ahora me muestra un mensaje que dice .

 

"Objeto Parameter mal definido. Se proporcionó información incompleta o incoherente"

 

¿Ya ejecutaste la consulta directamente desde algún administrador de MySQL ?

 

Yo normalmente realizo mis consultas así para ir descartartando probabilidades.

 

Saludos


  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.441 mensajes
  • LocationMéxico

Escrito 31 enero 2017 - 02:44

Otra cosa

 

Pareciera que el problema son los parámetros, porque no colocas esa consulta en el componente, es decir, en tiempo de diseño, configuras las propiedades (DataType y Direction) en los parámetros del componente y ya no deberías tener problema.

 

Saludos


  • 0

#20 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 639 mensajes
  • LocationArgentina

Escrito 31 enero 2017 - 02:47

Perdon si me exprese muy mal

 

Me referia a que con este codigo:


delphi
  1. ADOQuery.SQL.Add(...)
  2. ADOQuery.SQL.Add(' WHERE Campo = :Param ');

El componente internamente interpreta la sentencia SQL y crea automaticamente los parametros; no hace falta que invoques para nada al metodo Parameters.AddParameter

 

Si por algun motivo te interesa desactivar esto ultimo y encargarte vos mismo de crear los parametros, debes setear la propiedad ParamCheck a False


  • 0





Etiquetado también con una o más de estas palabras: adoquery, mysql, delphi