Recent

Author Topic: Consulta sql a partir de un Tedit  (Read 1974 times)

soymoe

  • New member
  • *
  • Posts: 17
Consulta sql a partir de un Tedit
« on: January 19, 2019, 09:32:04 pm »
Hola, quiero hacer una consulta de un campo CUIL/CUIT a partir del texto de un Tedit, el campo CUIL/CUIT es entero, trate con esto pero me da error
Code: Pascal  [Select]
  1.           ZQueryBusqueda.Close;
  2.           ZQueryBusqueda.sql.Clear;
  3.           ZQueryBusqueda.sql.Add('SELECT * FROM personas WHERE CUIL/CUIT LIKE '+'%'+EditBusqueda.Text);
  4.           ZQueryBusqueda.Open;
  5.           ZQueryBusqueda.Open;        

GAN

  • Full Member
  • ***
  • Posts: 208
Re: Consulta sql a partir de un Tedit
« Reply #1 on: January 19, 2019, 11:19:11 pm »
Hola, seguro que como nombre de campo podes usar la bara / ? Creo que no, yo cambiaría a CUIT o CUITOCUIL, de todas formas el nro. es el mismo y tengo entendido que el CUIL ya no se usará más, directamente el CUIT.

En cuanto a la consulta se puede simplificar quitando sql.Clear y usando sql.Text en lugar de sql.Add.

En cuanto al operador LIKE es solo para strings o sea que deberías primero tratar al entero como cadena, con CAST.

Code: Pascal  [Select]
  1. 'SELECT * FROM personas WHERE CAST(CUIT AS TEXT) LIKE '+'%'+EditBusqueda.Text'

O

Code: Pascal  [Select]
  1. 'SELECT * FROM personas WHERE CAST(CUIT AS VARCHAR(11)) LIKE '+'%'+EditBusqueda.Text'

Otra opción es guardar el nro. CUIT como texto, te recomiendo siempre usar VARCHAR con la cantidad de caracteres en lugar de TEXT, te evitará luego problemas con por ejemplo DBGrid.

Saludos.
Lazarus 1.6 FPC 3.0.0 Linux Mint Mate 17.2 x86_64 GTK-2
Zeos 7.1.3 - Sqlite 3.8.2

Foro Lazarus en español http://forum.lazarus.freepascal.org/index.php/board,73.0.html

daragor

  • New member
  • *
  • Posts: 13
    • Blog Webscom
Re: Consulta sql a partir de un Tedit
« Reply #2 on: March 08, 2019, 03:55:39 pm »
Solo para brindar más opciones a la codificación hago mi aporte, ya que lo dicho por GAN es correcto.

Primero, pienso que el CUIT es un número unico, osea que pertenece a una sola entidad o persona, y se podria alamacenar como un numero entero y buscarlo como tal, como si se tratara del DNI... por eso no es necesario usar LIKE en la consulta, ya que es propio de los strings y menos con los comodines % que son para buscar dentro un string... dicho esto, una forma que yo uso siempre en consultas son los Parametros, entonces podría ser:

Code: Pascal  [Select]
  1.  
  2.  query.Active:= false;
  3.  query.SQL.Text:= 'SELECT * FROM personas WHERE CUIT=:C';
  4.  query.ParamByName('C').AsInteger:= strtoint(trim(nro_cuit.text));
  5.  query.Open;
  6.  

C es el parametro que puede ser del tipo que queramos, en este caso integer
nro_cuit el input TEdit donde se ingresa el nro del cuit

Ahora si quieres almacenarlo con los guiones - entonces si, usa todo en formato texto.

esa sería mi manera de hacer la consulta.
saludos!!


« Last Edit: March 08, 2019, 04:11:16 pm by daragor »
Inculcando el software libre.
https://www.webscom.net

lucamar

  • Hero Member
  • *****
  • Posts: 1299
Re: Consulta sql a partir de un Tedit
« Reply #3 on: March 08, 2019, 04:58:17 pm »
Usar parametros es una buena idea ... y probablemente la única forma sensata de hacerlo partiendo de un TEdit :)

Pero esto:

Primero, pienso que el CUIT es un número unico, osea que pertenece a una sola entidad o persona, y se podria alamacenar como un numero entero y buscarlo como tal, como si se tratara del DNI...

No. Mala idea. Ese CUIT, el número de DNI, el NIF, etc. no son números: son códigos más o menos opacos. Lo mejor es almacenarlos (y usarlos) exactamente como son, en una cadena.

Un ejemplo: En España un DNI* puede tener el mismo "número" que un DIE y sólo se diferencian en que el último lleva una "X" delante. Incluso el código de control (la letra final) es el mismo. Cierto que no suele pasar que existan ambos a la vez pero es posible --- si no han cambiado nada desde la última vez que tuve que hacer algo con ellos :)

* Abreviaturas (para los que no se las saben):
DNI : Documento Nacional de Identidad
DIE : Documento de Identificación de Extranjeros (oficialmente tiene otro nombre pero nadie lo usa :))
« Last Edit: March 08, 2019, 05:01:18 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.

GAN

  • Full Member
  • ***
  • Posts: 208
Re: Consulta sql a partir de un Tedit
« Reply #4 on: March 08, 2019, 09:26:53 pm »
@lucamar los CUIT/CUIL/DNI/DNU/LC/LE son enteros, no hay letras, es así hace décadas.
Lazarus 1.6 FPC 3.0.0 Linux Mint Mate 17.2 x86_64 GTK-2
Zeos 7.1.3 - Sqlite 3.8.2

Foro Lazarus en español http://forum.lazarus.freepascal.org/index.php/board,73.0.html

lucamar

  • Hero Member
  • *****
  • Posts: 1299
Re: Consulta sql a partir de un Tedit
« Reply #5 on: March 08, 2019, 10:21:36 pm »
@lucamar los CUIT/CUIL/DNI/DNU/LC/LE son enteros, no hay letras, es así hace décadas.

Igual estamos hablando de cosas distintas. Por DNI, yo me refiero al Documento Nacional de Identidad de España. Y sí tiene una letra, al final, que sirve como "dígito" de verificación: Es el mismo código que empezó a usarse hace años en el NIF para personas físicas hasta que ambos se fundieron hace ... 15? 20 años? No recuerdo.

De todas formas, un codigo de identificación es un código de identificación no importa si usa sólo dígitos o una mezcla de dígitos y letras o lo que sea: es un código más o menos opaco que no debería convertirse, aunque sólo sea por precaución.
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 1.8.4 & 2.0.2 w/FPC 3.0.4 on:
(K|L)Ubuntu 12..16, Windows XP SP3, various DOSes.