Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error al realizar búsqueda: Incorrect sintax near '...' (https://www.clubdelphi.com/foros/showthread.php?t=89883)

davidmedina29 24-02-2016 01:49:52

Error al realizar búsqueda: Incorrect sintax near '...'
 
gracias por tu aporte roman de verdad me ayudo mucho.

ahora tengo un ultimo detalle. resulta que tengo un boton buscar aqui les pongo el codigo del boton
Código Delphi [-]
procedure TfPeriodosNomina.cxButton1Click(Sender: TObject);
begin
with dm do
  begin
   Q_PerNomina.Close;
   Q_PerNomina.DeleteWhere;

   if (cxComboBox1.Text='Ejercicio')and(cxTextEdit1.Text<>'') then
    Q_PerNomina.AddWhere('EJERCICIO='+cxTextEdit1.Text)

   else if (cxComboBox1.Text='Periodo')and(cxTextEdit1.Text<>'') then
    Q_PerNomina.AddWhere('PERIODO='+QuotedStr(cxTextEdit1.EditValue))

    else if (cxComboBox1.Text='Mes')and (cxComboBox2.Text<>'') then
    Q_PerNomina.AddWhere('MES='+(cxComboBox2.EditValue));
    Q_PerNomina.Open;

  end;
end;

ahi tengo dos combobox el cxCombobox1 tiene 3 items
Ejercicio
Periodo
Mes

el cxCombobox2 tiene los meses
Enero
Febrero
Marzo
etc..

el detalle es que cuando busco mes me marca esste error:
Incorrect sintax near 'Enero'

alguna sugerencia se los agradeceria mucho

roman 24-02-2016 03:18:25

Muy probablemente cxComboBox2.EditValue también debe ir con QuotedStr.

LineComment Saludos

AgustinOrtu 24-02-2016 03:51:08

No sabemos que componente estas usando para realizar el query

No son los estandar de Delphi; de hecho, es la primera vez que veo el metodo "AddWhere"

El codigo esta medio extraño

1) Chequeas el valor de cxTextEdit1.Text y añades un Where Ejercicio = cxTextEdit1.Text
2) Chequeas nuevamente el valor de cxTextEdit1.Text, y añades un Where Periodo = cxTextEdit1.EditValue

??

Luego no sabemos que tipo son los campos de la BD

Por otro lado, parece ser que, o bien el componente está generando mal la consulta SQL, o bien estas usando mal el componente

ecfisa 24-02-2016 03:53:23

Hola davidmedina29.

Por favor no pongas consultas distintas en el mismo tema, eso dificulta las búsquedas y genera inconvenientes, recuerda: Una nueva consulta = un nuevo hilo.

Moví tu consulta como un nuevo tema y un instante después roman contestaba tu pregunta (y te daba la misma recomendación) [ aquí ].

Saludos y gracias por tu colaboración :)

davidmedina29 24-02-2016 16:54:11

hola buen dia disculpa ecfisa pense que estaba relacionado con el hilo que ya tenia por eso lo puse ahi

y roman ya lo habia puesto asi con el QuotedStr pero marca este error
Código:

conversion failed when converting the varchar value '01 Enero' to data type int
asi lo puse
Código Delphi [-]
with dm do
  begin
   Q_PerNomina.Close;
   Q_PerNomina.DeleteWhere;
   if (cxComboBox1.Text='Ejercicio')and(cxTextEdit1.Text<>'') then
    Q_PerNomina.AddWhere('EJERCICIO='+cxTextEdit1.Text)

   else if (cxComboBox1.Text='Periodo')and(cxTextEdit1.Text<>'') then
    Q_PerNomina.AddWhere('PERIODO='+QuotedStr(cxTextEdit1.EditValue))

if (cxComboBox1.Text='Mes')and (cxComboBox2.Text<>'') then
    Q_PerNomina.AddWhere('MES='+QuotedStr(cxComboBox2.EditValue));
    Q_PerNomina.Open;

el periodo y el ejercicio si funciona bien el detalle es con el mes.

tengo un msQery(Q_PerNomina) y un datasource(DS_PerNomina) en un dm
tengo una bd con los campos mes, periodo y ejercicio los tres son de tipo int
tengo un cxCombobox1 con los items mes, periodo y ejercicio cuando elijo periodo y ejercicio se hace visible el cxTextedit1 y cuando elijo mes se hace visiblo el cxCombobox2 con los sig items:
01 Enero
02 Febrero
03 Marzo
04 Abril
05 Mayo
06 Junio
07 Julio
08 Agosto
09 Septiembre
10 Octubre
11 Noviembre
12 Diciembre

se que el error es porque no puedo insertar str en un campo que es int pero es lo que quiero saber
alguna sugerencia

AgustinOrtu 24-02-2016 17:22:42

Es el mismo problema que veniamos ya tratando antes

Código Delphi [-]
if (cxComboBox1.Text='Mes')and (cxComboBox2.Text<>'') then
    Q_PerNomina.AddWhere('MES='+QuotedStr(cxComboBox2.EditValue));

En tu base tenes un int, le estas mandando 02 Enero, es logico que te de error

davidmedina29 24-02-2016 17:49:14

hola Agustin gracias por responder, si entiendo pero mi duda es que se puede aplicar ahi para que en ves de enero busque el el numero del mes :(

AgustinOrtu 24-02-2016 18:27:06

Es que es lo mismo cuando tenias que grabar, creo que quedaba ComboBox.ItemIndex + 1

davidmedina29 24-02-2016 18:56:43

de hecho ya lo intente asi
Código Delphi [-]
if (cxComboBox1.Text='Mes')and (cxComboBox2.ItemIndex <>'')  then
    Q_PerNomina.AddWhere('MES='+QuotedStr(cxComboBox2.EditValue));

y me marca error no me deja correrlo
me marca
incopatibles type 'String' and 'Integer'

AgustinOrtu 24-02-2016 19:08:02

Porque la funcion QuotedStr solo sirve para strings, no sirve para Integers

ecfisa 24-02-2016 19:16:29

Hola.
Cita:

Empezado por davidmedina29 (Mensaje 502583)
de hecho ya lo intente asi
Código Delphi [-]
  if (cxComboBox1.Text='Mes')and (cxComboBox2.ItemIndex <>'')  then
    Q_PerNomina.AddWhere('MES='+QuotedStr(cxComboBox2.EditValue));

y me marca error no me deja correrlo
me marca
incopatibles type 'String' and 'Integer'

También revisa lo que remarque en color rojo. La propiedad ItemIndex es de tipo Integer, no tiene ningún sentido comparar si su valor es una cadena vacía.

Saludos :)

davidmedina29 24-02-2016 19:34:58

si entiendio que mi combobox esta en string y debo guardar un campo int pero ese es el punto no se como solucionar que al buscar busque el numero del 1 al 12 en la bd y no el texto de enero a diciembre.

gracias por responder compañeros

ecfisa 24-02-2016 20:07:07

Hola.
Cita:

Empezado por davidmedina29 (Mensaje 502587)
si entiendio que mi combobox esta en string y debo guardar un campo int
...

Primero tenes que tener en claro que:
  • ComboBox.ItemIndex: Devuelve el índice actualmente seleccionado y es un valor de tipo Integer
  • ComboBox.Items[ComboBox.ItemIndex]: Devuelve el ítem actualmente seleccionado y es un valor de tipo String

Cita:

...
pero ese es el punto no se como solucionar que al buscar busque el numero del 1 al 12 en la bd y no el texto de enero a diciembre.
La verdad es que no te entiendo claramente, espero que lo que consultas sea esto:
Código Delphi [-]
...
  tu_Query.Close;
  tu_Query.SQL.Text := 'SELECT * FROM TU_TABLA WHERE MES = :MESNRO';
  tu_Query.ParamByName('MESNRO').AsInteger := ComboBox.ItemIndex;  //(*)
  tu_Query.Open;
...
(*) Es una sintáxis genérica, desconozco los componentes que usas ( ¿ Son UniDac ? ), tendrás que hacer los ajustes necesarios.

Saludos :)


La franja horaria es GMT +2. Ahora son las 18:08:11.

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