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
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 19:03:19.


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