Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error al hacer varias busquedas con adoquery (https://www.clubdelphi.com/foros/showthread.php?t=41985)

cucuy 30-03-2007 19:41:30

Error al hacer varias busquedas con adoquery
 
Hola el problema que tengo es de que estoy ejecutando una busqueda sobre una tabla de mi base de datos con un adoquery y mysql, la base de datos la tengo en mi pc, el problema es de que a la primera vez que ejecuto la consulta la hace correctamente pero despues de ejecutar varias consultas delphi me manda un error, donde me muestra una ventana de CPU donde me aparece una especie de codigo ensamblador y de tiene mi programa.

Este es el codigo q utilizo en el onchange de un edit, ya busque en los hilos que vienen en el foro y en ninguno e encontrado la solucion para mi problema.
Código Delphi [-]
qbuscar.Close;
qbuscar.SQL.Clear;
qbuscar.SQL.Add('select * from CLIENTES where NOMBRE like:n');
qbuscar.Parameters.ParamByName('n').Value:='%'+edtbuscar.Text+'%';
qbuscar.Open;

vtdeleon 30-03-2007 20:46:05

Saludos

Trata con esta modificación en esta linea:
Código Delphi [-]
qbuscar.Parameters.ParamByName('n').Value:=QuoteStr('%'+edtbuscar.Text+'%');

Usa las Etiquetas para que el codigo aparezca resaltado.

cucuy 30-03-2007 23:02:01

Hola mira de la forma en que tenia el codigo la forma anterior no me marcaba error pero al momento de buscar no encontraba nada, entonces decidi cambiar en la sentencia igual por el like, ahy si encuentra pero al hacer un numero determinado de busquedas me vuelve a presentar el mismo error, me vuelve a presentar la fea pantalla con el titulo de CPU.

qbuscar.Close;
qbuscar.SQL.Clear;
qbuscar.SQL.Add('select * from CLIENTES where NOMBRE LIKE:n');
qbuscar.Parameters.ParamByName('n').DataType:=ftstring;
qbuscar.Parameters.ParamByName('n').Value:=('%'+trim(edtbuscar.Text)+'%');
qbuscar.Open;

vtdeleon 30-03-2007 23:39:39

Que error te tira?

Quitale los parentesis que te puse en rojo.

qbuscar.Parameters.ParamByName('n').Value:=('%'+trim(edtbuscar.Text)+'%');

Saludos

cucuy 31-03-2007 01:10:40

Hola que ondas oye mira ya le quite los parentesis que me dijiste pero me sigue saliendo ese error, lo que hace ahora es que por ejemplo encuentra el registro que busco pero al ejecutar la busqueda pa ver otros archivos me vuelve a salir la ventana de CPU, es la pantalla donde viene el codigo ensamblador, el titulo de la pantalla es CPU, no me falta de configurarle algo al adoquery o al adoconecction que quiza sea lo que me provoke no poder hacer las busquedas que necesito?

vtdeleon 31-03-2007 01:35:12

Ok, creo entender a lo que te refieres con "Ventana de CPU". Ejecuta tu programa fuera de Delphi. Y escribe aqui el error que te dá el sistema.

Sin conocer ese error estamos fritos.

Saludos

cucuy 31-03-2007 01:43:05

Oye con la novedad de que el error corriendolo desde el ejecutable fuera de delphi funciona a la perfeccion pero corriendolo con F9 malas ahy es donde truena, entonces ya mi duda seria si no me dara problemas mas adelante ese error que me salia, por que ahorita estoy intentandolo hacer que truene y de plano no falla fuera de delphi. Muchas gracias por tu ayuda y aqui paso el codigo con el que me esta funcionando por si alguien mas le sirve;

qbuscar.Close;
qbuscar.SQL.Clear;
qbuscar.SQL.Add('select * from CLIENTES where NOMBRE LIKE:n');
qbuscar.Parameters.ParamByName('n').DataType:=ftstring;
qbuscar.Parameters.ParamByName('n').Value:='%'+trim(edtbuscar.Text)+'%';
qbuscar.Open;

cucuy 31-03-2007 02:48:18

hola ya volvi pues con la mala noticia de que estaba ejecutando mi sistema fuera de delphi i por fin me salio el error que pense que se habia ido para no volver mira el errror que me sale es Runtime error Program ABC.Exe R6025 pure virtual function call.

cucuy 31-03-2007 03:19:15

Mira le estuve moviendo a dale y dale al sistema hasta que lo hice llorar, lo que hice fue con el ejecutable lo corri entonces me salio el error antes mencionando de runtime error le puse aceptar y despues le volvi a mover al edit y me salio una ventanita error inesperado y despues de esa enseguida me sale una que dice que un objeto estaba abierto y de ahy ya no me puedo mover.

vtdeleon 31-03-2007 04:44:41

Me parece que ese error que te sale no es causado (directamente) por el código que has puesto. Debe haber algun evento, procedimiento o función que está provocando esa llamada.

Si es posible, muestranos los procedimientos o funciones involucrados de esa unidad. Y usa las etiquetas para los códigos. Edita tu primer mensaje, en donde he puesto las etiquetas para que veas como se utilizan.

Saludos

cucuy 31-03-2007 04:58:41

hola que tal oye quieres que te pase la unidad de codigo donde me manda el error?

Código:


unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
type
  TForm1 = class(TForm)
    B: TButton;
    ADOConnection1: TADOConnection;
    qbuscar: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    edtbuscar: TEdit;
    ADOConnection2: TADOConnection;
    DataSource2: TDataSource;
    DBGrid2: TDBGrid;
    wbuscar: TADOQuery;
    contrato: TEdit;
    pedido: TEdit;
    Button1: TButton;
    procedure edtbuscarChange(Sender: TObject);
    procedure contratoChange(Sender: TObject);
    procedure pedidoChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.contratoChange(Sender: TObject);
begin
  wbuscar.Close;
  wbuscar.SQL.Clear;
  wbuscar.SQL.Add('select * from PEDIDOS where (PEDIDO LIKE:n)');
  wbuscar.Parameters.ParamByName('n').DataType:=ftstring;
  wbuscar.Parameters.ParamByName('n').Value:='%'+trim(contrato.Text)+'%';
  wbuscar.Open;
end;
procedure TForm1.pedidoChange(Sender: TObject);
begin
  wbuscar.Close;
  wbuscar.SQL.Clear;
  wbuscar.SQL.Add('select * from CLIENTES,PEDIDOS where (PEDIDO LIKE:n) and (PEDIDOS.CLIENTE = CLIENTES.CLIENTE)');
  wbuscar.Parameters.ParamByName('n').DataType:=ftstring;
  wbuscar.Parameters.ParamByName('n').Value:='%'+trim(pedido.Text)+'%';
  wbuscar.Open;
end;
end.

mira truena en cualquier de los dos onchange de los edit el queri lo tengo ligado a un adoconection y tengo un dbgrid q muestra los y este oviamente ta ligado a un tdatosource ligado al adoquery

egostar 31-03-2007 05:01:06

No necesitas la opcion de DataType = ftString, quitala y prueba.

Salud OS.

Caral 31-03-2007 05:02:55

Hola cucuy
Yo intentaria esto primero y luego por parametros:
Código Delphi [-]
qbuscar.Close;
qbuscar.SQL.Clear;
qbuscar.SQL.Add('select * from CLIENTES where NOMBRE like' +QuoteStr(edtbuscar.Text));
qbuscar.Open;
Creo que se ve mas facil, por lo menos para empezar
Saludos

Caral 31-03-2007 05:26:48

Hola
La verdad yo haria un simple filtro asi:
Pensando que pedidos es numerico:
Código Delphi [-]
procedure TForm1.contratoChange(Sender: TObject);
var
   Filtro : String;
begin
  wbuscar.Filtered := False;
  Filtro := 'PEDIDOS Like '+contrato.Text;
  wbuscar.Filter := Filtro;
  wbuscar.Filtered := True
end;
Si pedidos es texto:
Código Delphi [-]
procedure TForm1.contratoChange(Sender: TObject);
var
   Filtro : String;
begin
  wbuscar.Filtered := False;
  Filtro := 'PEDIDOS Like '''+contrato.Text+ '*''';
  wbuscar.Filter := Filtro;
  wbuscar.Filtered := True
end;
Teniendo en cuenta que wbuscar se encuentra abierto.
Saludos

cucuy 31-03-2007 18:42:46

Hola Caral Como estas mira eso de quitarle la instruccion de datatype lo tenia antes asi y me mandaba errror mas rapido, y entonces me puse a hacer tu segunda recomendacion que es la de poner un simple filtro en el onchange en lugar de estar haciendo un select, el problema fue que puse el filtro que me dijiste ocacion lo hace bien pero a la segunda me manda un error que dice: ABC. exe raised exception class EOle Exception with message 'Argumentos incorrectos', fuera del intervalo permitido o en conflicto con otro. La configuracion que tengo de los componentes que utilizo en esta operacion es la que viene de foul, solo ago la conexion del adoconection con la base de datosy ligo el adoquery a el adoconection osea que no le e movido a nada de los tipos de cursores y esas cosas, por que lo intente y el resultado era el mismo o el peor por que que en veces no me mostraba informacion.

Código:

procedure TForm1.contratoChange(Sender: TObject);
var
filtro:string;
begin
  wbuscar.Filtered := False;
  Filtro := 'PEDIDO Like '''+contrato.Text+ '*''';
  wbuscar.Filter := Filtro;
  wbuscar.Filtered := True


vtdeleon 31-03-2007 22:15:31

Nombranos los componetnes que estas utilizando en ese formulario.

Saludos

cucuy 31-03-2007 22:19:38

mira estoy usando un adoquery (qbuscar), un adoconection (adoconection1) un edit (edtbuscar) un dbgrid (dbgrid1) y un datasource (datasource1) esos componentes utilizo todos con sus propiedades de foul solo ligando lo necesario para tener acceso a la base de datos y para mostrar en el dbgrid la informacion

vtdeleon 31-03-2007 22:24:52

Aun no veo el error :confused:. Que base de datos usas?

Por último, hagamos una prueba. Crea un nuevo proyecto o un nuevo formulario e intenta hacer lo mismo, coloca todos los componentes y el codigo (nada de Copy-Paste).

cucuy 31-03-2007 22:29:40

ok dejame ago eso utilizo base de datos mysql es lo unico que me esta atorando por que puedo hacer altas, bajas y cambios sin ninguno problema solo las busquedas se me pusieron necias jajajaja, gracias ahy te cuento como me fue, oye no podra ser problema del MSDART.DLL ?

vtdeleon 31-03-2007 22:41:46

En MySql soy un proble diablo. No te sabría decir si el problema viene de ahí. Si aun te persiste el problema, podrías cambiar los componentes Ado a Zeus o MyDac que son mas nativos para MySQL, siempre que te sea posible y no conlleve a mayores daños y perdida de tiempo.

De todos modo, realiza la prueba y nos cuentas. Suerte
Saludos


La franja horaria es GMT +2. Ahora son las 04:23:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi