FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Ayuda para el uso de TQuery
hola espero me puedan dar una mano
Estoy comensando a programar en Sql y necesito un poco de ayuda. Tengo un procedimiento que recibe y almacena un String en mi BD, yo necesitaria realizar un control de "no existencia" de dicho String en la Tabla para asi poder almacenarlo y no se como realizar esto. Usando Ttable realizaba lo siguiente Código:
{para controlar que no se repita} with tabla1 do Begin first; while Not EOF do Begin if (Texto_a_ingresar = tabla1.fieldbyname('Mi_Campo').asstring) then Begin Application.MessageBox('ya existe el texto','Error' ,MB_DEFBUTTON1); exit; {salia} end; next; end; end; {si llegaba aqui era porque no existia} tabla1.insert; // Ponia la tabla en modo insertar... tabla1.fieldbyname('Mi_Campo').asstring:=Texto_a_ingresar; tabla1.post; {guarda} |
#2
|
||||
|
||||
Esto lo puedes "achicar" aún usando un TTable. Tú realizas manualmente la búsqueda pero la componente TTable ya tiene métodos para realizar búsquedas como Locate o FindKey:
Código:
tabla1.open; if tabla1.locate('Mi_Campo', Texto_a_ingresar) then Application.MessageBox('ya existe el texto','Error' ,MB_DEFBUTTON1); else begin tabla1.insert; tabla1.fieldbyname('Mi_Campo').asstring:=Texto_a_ingresar; tabla1.post; end; select * from tabla where Mi_Campo=Texto_a_ingresar y ejecutas la consulta con Query.Open. Si la consulta te regresa por lo menos un registro es que ya existe uno con el texto. Si no te regresa ningún registro entonces lo insertas. // Saludos |
#3
|
|||
|
|||
achicar a nivel de código.... no, pero sí que verás/notarás cambio en el rendimiento
Código:
Query.Close; Query.SQL.Clear; Query.SQL.Add('select * from tabla where campo = ' + QuoteStr('mi_txto') ); Query.Open; if Query.IsEmpty then Añadir |
#4
|
||||
|
||||
Código:
Query.Close; {supongo que siempre se tiene que cerrar el quiery antes de cambiar las lineas de sql? } Query.SQL.Clear; Query.SQL.Add('select * from tabla where campo = ' + QuoteStr('mi_texto') ); {no entiendo el uso de "QuoteStr('mi_texto')" no se puede poner solamente "'mi_texto'" ?} Query.Open; {para ejecutar mi Sql? } if Query.IsEmpty then Añadir Por supuesto, faltaría el control de errores con try...except..end;[/quote] |
#5
|
||||
|
||||
Cita:
Una observación. La idea de que con sql se logra mejor rendimiento es cierta cuando usas una base de datos "real". Si usas Paradox, normalmente el uso de TTable es más eficiente ya que está diseñado para ello. Paradox es particularmente lento con consultas sql que involucran campos de texto como en tu caso. Yo te recomiendo que hagas pruebas para ver cuál te resulta más rápido. // Saludos |
#6
|
||||
|
||||
Cita:
Cita:
Cita:
para usar sql tendria que generar las tablas del tipo SQL Server? Los datos que voy a utilizar son solamente texto "nombres" , rangos predefinidos "ej. pista = "hum" o "moj" o etc " y algunos numeros "enteros" que me recomiendan que utilice? Ttable o Tquery gracias de nuevo |
#7
|
|||
|
|||
Cita:
Cita:
Cita:
|
#8
|
||||
|
||||
Cita:
Cita:
|
#9
|
|||
|
|||
Si es para empezar y hacer pruebas (no complicandote demasiado la vida), con Paradox te vale. Pero más adelante, te recomiendo hagas el paso a un SGBD de los mencionados anteriormente
Nota: todos de pago menos Firebird (con licencia IPL Interbase Public Licence) |
#10
|
||||
|
||||
Cita:
Sí, sí, ya sé, MySql carece de muuuuchas cosas pero lo que maneja lo hace muy acorde al estándar y para empezar (y yo diría muchas veces continuar) es bastante bueno. // Saludos |
#11
|
||||
|
||||
Yo diria que te valieras de una llave para el campo (primaria o restriccion UNIQUE del campo), intentaras insertar el valor, y manejaras la excepcion con un try/except
Asi, te evitarias tener que hacer la consulta cada vez, incluso cuando el valor no existe en la tabla. Seguro que el motor de la base de datos en su interior tiene metodos mas eficientes para detectar cuando el incumple o no una de sus restricciones.
__________________
Héctor Geraldino Software Engineer |
#12
|
||||
|
||||
Yo difiero en opinión a mi amigo cadetill en este punto. Creo que si aún no has empezado... es buena idea que comences de una vez con una base de datos SQL "real", como ya te han explicado por aqui.
interbase/firebird es muy buena opción... fácil de instalar, prácticamente libre de mantenimiento, y te enseñará de una vez a batallar en un campo mucho mas fertil que paradox... donde, según mi manera de ver, tenes mas riesgo de adquirir vicios y prácticas que luego no te valdrán al pasar a bases de datos c/s. Además, al inicar asi, tendrás de una vez la ventaja que tus proyectos serán mucho mas escalables, pues cuando tus clientes crezcan, podrán montarse en red, con acceso multiusuario, con mucho menos cambios (o quizas ninguno, si te preocupas de una vez por cuestiones de concurrencia) que si lo haces con Paradox. Además, aprenderás desde el principio a lidiar con los asuntos de estas bases de datos (en todos lados se cuecen habas.. ciertamente). Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#13
|
||||
|
||||
Cita:
http://www.interbase.com.mx/obtener_ib.php Yo ya programe algo en paradox (muy basico), pero ahora queria entrar mas en el mundo de SQL, que a mi entender es lo mejor para BD. muchas gracias por sus comentarios |
|
|
|