Forum > Spanish
Consulta sql a partir de un Tedit
soymoe:
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 [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- ZQueryBusqueda.Close; ZQueryBusqueda.sql.Clear; ZQueryBusqueda.sql.Add('SELECT * FROM personas WHERE CUIL/CUIT LIKE '+'%'+EditBusqueda.Text); ZQueryBusqueda.Open; ZQueryBusqueda.Open;
GAN:
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 [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---'SELECT * FROM personas WHERE CAST(CUIT AS TEXT) LIKE '+'%'+EditBusqueda.Text'
O
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---'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.
daragor:
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 [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --- query.Active:= false; query.SQL.Text:= 'SELECT * FROM personas WHERE CUIT=:C'; query.ParamByName('C').AsInteger:= strtoint(trim(nro_cuit.text)); query.Open;
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!!
lucamar:
Usar parametros es una buena idea ... y probablemente la única forma sensata de hacerlo partiendo de un TEdit :)
Pero esto:
--- Quote from: daragor on March 08, 2019, 03:55:39 pm ---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...
--- End quote ---
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 :))
GAN:
@lucamar los CUIT/CUIL/DNI/DNU/LC/LE son enteros, no hay letras, es así hace décadas.
Navigation
[0] Message Index
[#] Next page