Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2004
Avatar de miguel_fr
miguel_fr miguel_fr is offline
Miembro
 
Registrado: mar 2004
Ubicación: Santiago del estero, Capital
Posts: 73
Poder: 21
miguel_fr Va por buen camino
Post 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}
yo tengo entendido que todo eso se puede achicar muchisimo en Sql, me podrian dar una mano?
Responder Con Cita
  #2  
Antiguo 10-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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;
Con un Query podrías poner la siguiente sentencia:

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
Responder Con Cita
  #3  
Antiguo 10-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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
Por supuesto, faltaría el control de errores con try...except..end;
Responder Con Cita
  #4  
Antiguo 10-04-2004
Avatar de miguel_fr
miguel_fr miguel_fr is offline
Miembro
 
Registrado: mar 2004
Ubicación: Santiago del estero, Capital
Posts: 73
Poder: 21
miguel_fr Va por buen camino
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
Muchas gracias me ayudo mucho estas lineas de codigo

Por supuesto, faltaría el control de errores con try...except..end;[/quote]
Responder Con Cita
  #5  
Antiguo 10-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por miguel_fr
no entiendo el uso de "QuoteStr('mi_texto')"
no se puede poner solamente "'mi_texto'" ?
Sí se puede. Lo que sucede es que muchas veces el texto a comparar provendrá de una variable de tipo string en lugar de poner directamente el texto. En esos casos deberás agregar las comillas dobles tú mismo o usar QuotedStr que lo hace por tí y permite mayor legibilidad del código.

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
Responder Con Cita
  #6  
Antiguo 10-04-2004
Avatar de miguel_fr
miguel_fr miguel_fr is offline
Miembro
 
Registrado: mar 2004
Ubicación: Santiago del estero, Capital
Posts: 73
Poder: 21
miguel_fr Va por buen camino
Cita:
Empezado por roman
En esos casos deberás agregar las comillas dobles tú mismo o usar QuotedStr que lo hace por tí y permite mayor legibilidad del código.
yo utiliso una variable, me sirve mucho la explicacion del QuotedStr
Cita:
Empezado por roman
Una observación. La idea de que con sql se logra mejor rendimiento es cierta cuando usas una base de datos "real".
no me queda muy claro lo de BD "real"
Cita:
Empezado por roman
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.
Yo tengo hasta ahora solamente 3 tablas en Paradox
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
Responder Con Cita
  #7  
Antiguo 11-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por miguel_fr
no me queda muy claro lo de BD "real"
Con una BD "real" supongo que Román se referirá a una BD transaccional estilo Firebird, Interbase, SQL Server, Oracle,.....

Cita:
Empezado por miguel_fr
Yo tengo hasta ahora solamente 3 tablas en Paradox
para usar sql tendria que generar las tablas del tipo SQL Server?
No, con Paradox puedes usar también SQL, lo que pasa es que, como bien dice Román, el SQL en Paradox es más lento.

Cita:
Empezado por miguel_fr
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
Supongo que todo dependerá de lo que quieras hacer
Responder Con Cita
  #8  
Antiguo 11-04-2004
Avatar de miguel_fr
miguel_fr miguel_fr is offline
Miembro
 
Registrado: mar 2004
Ubicación: Santiago del estero, Capital
Posts: 73
Poder: 21
miguel_fr Va por buen camino
Cita:
Empezado por cadetill
No, con Paradox puedes usar también SQL, lo que pasa es que, como bien dice Román, el SQL en Paradox es más lento.
entonces que tipo de BD deveria de usar para obtener todos los beneficios de SQL?¡
Cita:
Empezado por cadetill
Supongo que todo dependerá de lo que quieras hacer
Aprender a manejar SQL, almenos lo basico por ahora
Responder Con Cita
  #9  
Antiguo 11-04-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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)
Responder Con Cita
  #10  
Antiguo 13-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cadetill
... a un SGBD de los mencionados anteriormente

Nota: todos de pago menos Firebird (con licencia IPL Interbase Public Licence)
Entonces añadamos MySql a la lista

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
Responder Con Cita
  #11  
Antiguo 13-04-2004
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 13-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 13-04-2004
Avatar de miguel_fr
miguel_fr miguel_fr is offline
Miembro
 
Registrado: mar 2004
Ubicación: Santiago del estero, Capital
Posts: 73
Poder: 21
miguel_fr Va por buen camino
Thumbs up

Cita:
Empezado por jachguate
interbase/firebird es muy buena opción...
ok, ya estoy buscando sobre estas BD y encontre este enlace que les puede ayudar a los novatos como yo
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:42:48.


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
Copyright 1996-2007 Club Delphi