Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consultas En Sql delphi 7 con Base de Datos access (https://www.clubdelphi.com/foros/showthread.php?t=75814)

luisraad 22-09-2011 18:50:29

Gracias Caral y Oscar...

Bueno oscar me interesaria que colocaras de la manera en que tu lo harias y la explicaras mejor... es nueva para mi pero me parece mas detallada y mas facil de aplicar... explicame eso y despues yo coloco ejemplos con condiciones..

Gracias

Casimiro Notevi 22-09-2011 18:51:01

Cita:

Empezado por luisraad (Mensaje 413072)
se que hay una forma mas detallada de hacer este tipo de consulta la pregunta es ¿¿¿esta bien asi??? ¬¬ no creoo!!!

Debe probar ese sql en el programa que estés usando "manager sql".
Así vas probando y depurando, cambiando, etc. hasta dar con lo que exactamente necesitas.

Caral 22-09-2011 18:57:56

Hola
El join es una condicion, se usa de muchas maneras, pero si no se sabe aveces no trae los datos que se quiere.
La consulta que as puesto es muy sencilla, no se necesita un join con solo un where funciona:
Código SQL [-]
'select cliente.codcliente, cliente.nombrecliente, cliente.direccion,cliente,telefono, ventas.fechaventas,ventas.totalventa from cliente,ventas
Where cliente.codcliente = ventas.codclientes';
Saludos

oscarac 22-09-2011 19:02:14

Cita:

Empezado por luisraad (Mensaje 413076)
Gracias Caral y Oscar...

Bueno oscar me interesaria que colocaras de la manera en que tu lo harias y la explicaras mejor... es nueva para mi pero me parece mas detallada y mas facil de aplicar... explicame eso y despues yo coloco ejemplos con condiciones..

Gracias

en el post anterior te explicaba como hacer los joins, para esto en cada tabla debe haber un campo en comun, por ejemplo imageinate 2 tablas de facturas de ventas las clasicas cabecera y detalle
ambas tablas tendrian en comun el tipo de documento y el numero de documento


entonces seria mas o menos asi

Código Delphi [-]
 
Select CAB.Tipo, Cab.Doc, Cab.FechaDOC, Det.Producto, Det.Cantidad, Det.Total 
From Cabecera Cab
Left Join Detalle Det on Cab.Tipo = Det.Tipo and Cab.Doc = Det.Doc
Where Cab.FechaDoc = '15/01/2010'

en este ejemplo dice... sacame todos los documentos, con el detalle de ops productos su cantidad y su precio que sean del dia 15/01/2010

se entiende?

Casimiro Notevi 22-09-2011 19:13:32

Aquí tienes un estupendo tutorial SQL, a la izquierda tienes las palabras y a la derecha sale explicando para lo que sirve y ejemplos variados.

luisraad 25-09-2011 20:35:58

Hola como estan??

bueno siguiendo el hilo de la consulta ahora veamos si de esta manera esta bien planteada la consulta con condiciones:

vamos a suponer que en el campo de direccion de la tabla clientes en la BD tiene unos registros en el campo direccion de las personas que viven en tolu y otros en puebla, ahora quiero que me liste en un DBgrid solo los clientes pertenecientes a tolu ustedes me guian y me dicen si esta malo asi:

Código Delphi [-]
 
var
c:string
 
begin
c:'select clientes.nombres, clientes.direccion from clientes where clientes.direccion='quotedstr('tolu');
adoquery1.sql.clear;
adoquery1.sql.add(c);
adoquery1.open:=true;
end;
end.

me imagino que esto esta bien, espero sus respectivas opniones y correcciones.

Caral 25-09-2011 20:54:26

Hola
Yo lo haria asi:
Código Delphi [-]
begin
adoquery1.sql.Text:= 'select clientes.nombres, clientes.direccion from clientes where clientes.direccion = :A';
adoquery1.Parameters[0].Value:= 'tolu';
adoquery1.open:= true;
end;
Saludos

Taburiente 25-09-2011 21:52:58

Cita:

Empezado por Casimiro Notevi (Mensaje 413084)
Aquí tienes un estupendo tutorial SQL, a la izquierda tienes las palabras y a la derecha sale explicando para lo que sirve y ejemplos variados.


Gracias por el link,esta bastante bien.

Saludos

luisraad 25-09-2011 23:26:44

Hola
 
hola Como va todo

Caral con respecto a tu forma de consultar quiero saber o mejor dicho quiero aprender porque no usas una variable 'c' (consulta) en las consultas que realizas tu usas esto

ADOquery.SQL.text:=(consulta);

y te sale bien...
la otra es como trabajar con parametros para consultas de ese tipo, o mejor dicho como se define un parametro para hacerconsultas

saludos

luisraad 25-09-2011 23:31:16

Cita:

Empezado por Caral (Mensaje 413394)
Hola
Yo lo haria asi:
Código Delphi [-]begin adoquery1.sql.Text:= 'select clientes.nombres, clientes.direccion from clientes where clientes.direccion = :A'; adoquery1.Parameters[0].Value:= 'tolu'; adoquery1.open:= true; end;

Saludos

no entiendo lo de :A osea los parametros

Caral 25-09-2011 23:33:35

Hola
No uso una variable por que es repetir código, me da pereza.
Uso Text por que me parece mucho mejor que add.
con add hay que limpiar la consulta siempre con clear antes, con text NO.
Para colocar un parametro simplemente se ponen dos puntos antes del nombre del parametro, asi: :Nombredelparametro
Saludos

Caral 25-09-2011 23:35:12

Hola
A es un nombre, como podria ser :Caral, o :Pepe, o el que se te antoje, es un nombre, simplemente.
Saludos

luisraad 25-09-2011 23:55:54

Bueno veamos otro tipo de condicion.

esta vez suponemos que en la tabla CLIENTES tenemos registros en el campo NOMBRE. pero resulta que ahora quiero listar los nombres especificando una letra es decir, traigame todos los nombres que empiezen por P, ya he visto lo que es el codigo like aca en clases pero esta explicito de una manera mas o menos asi, en la forma donde estoy diseñando la apicacion se debe insertar un edit y en su propiedad text ponerle la comilla simple ' (ya oscar me explico como hacerlo con quotedstr), y aparte debo insertar otro edit con el simbolo de % y otra comilla simple osea en su popiedad text %' el codigo me queda de la siguiente manera.

((basandome en lo aprendido en clases))
supongamos que el edit1.text es el de la comilla simple, el edit2.text en donde se colocan las letras y el edit3.text el que contiene la comilla y el %

Código Delphi [-]
var
c:string;
begin
c:='select clientes.nombre from clientes where clientes.nombre like'+edit1+edit2.text+edit3.text;

end;
end.
según comprendo en el edit2.text al poner una letra en especifico este traera los nombre que empiezen por la letra que coloco en ese espacio, aun sabiendo de que es complicado de esta manera deseo saber como podria solucionar lo del codigo LIKE y cuando tenga esa duda clara aplico tu forma de consultar caral haber si apredi

saludos

Caral 26-09-2011 00:03:13

Hola
No entiendo como un profesor le dice a sus alumnos que programen así, no lo entiendo.
Esto no creo que sea la manera de iniciarse en delphi, no lo creo.
Saludos

luisraad 26-09-2011 00:12:37

Cita:

Empezado por Caral (Mensaje 413417)
Hola
No entiendo como un profesor le dice a sus alumnos que programen así, no lo entiendo.
Esto no creo que sea la manera de iniciarse en delphi, no lo creo.
Saludos


bueno acabo de ver un foro con lo del tema LIKE y lo que vi fue esto:

Código Delphi [-]
'select clientes.nombre from clientes Where Nombres like'+ quotedstr('%'+edit2.text+'%');

lo hize bien???

Caral 26-09-2011 00:18:09

Hola
Depende.
Algunas BD lo aceptan otras no.
En access es algo diferente:
Código SQL [-]
'select clientes.nombre from clientes Where Nombres Like '''+ Edit2.Text + '*'''
Como ves no uso quotedstr para nada.
Osea, si quieres lo usas, si no, no.
Hay muchas maneras de hacer las cosas, todo depende del novato que te las explique.:)
Saludos

luisraad 26-09-2011 00:38:26

Cita:

Empezado por Caral (Mensaje 413419)
Hola
Depende.
Algunas BD lo aceptan otras no.
En access es algo diferente:
Código SQL [-]'select clientes.nombre from clientes Where Nombres Like '''+ Edit2.Text + '*'''

Como ves no uso quotedstr para nada.
Osea, si quieres lo usas, si no, no.
Hay muchas maneras de hacer las cosas, todo depende del novato que te las explique.:)
Saludos

ok gracias por el aporte

entonces aplicando este tipo de consultas con parametros como quedaria ??
gracias de antemano

Caral 26-09-2011 01:23:57

Hola
Me imagino que algo asi:
Código Delphi [-]
begin
adoquery1.sql.Text:= 'select clientes.nombre from clientes Where Nombres Like :luisraad';
adoquery1.Parameters[0].Value:= ''+ Edit2.Text + '*''';
adoquery1.open:= true;
end;
Saludos

luisraad 26-09-2011 04:23:10

hola

vamos con otra consulta mas compleja
dada la situacion tengo una BD llamada biblioteca en dicha BD hay 3 tablas

tabla1=suscriptor
tabla2=libro
tabla3=prestamo

en la tabla1 hay los siguientes campos:
cod nombre direccion

en la tabla2
codlib nombrelib autor descripcion

en la tabla3
cod nombre nombrelib cantprest

dada la sircustancia la aplicacion caturará los datos del codigo del suscriptor, el codigo del libro o el nombre del libro... estos datos seran guardados en la tabla prestamo supongamos que ya hay registros en las tablas 1 y 2


condicion: cuando el suscrptor haya pedido tres libros el programa arroje un mensaje que diga no puede tener mas prestamos...

tengo algo hecho pero no se entiende tengo unos edit donde capturo esa informacion en el edit1 cpturo el codigo, en el edit2 capturo el nombre y en el edit3 el codigo del libro... ((no viene al caso que lo diga pero es para una guia..))

saludos

luisraad 26-09-2011 04:29:03

aqui hay una muestra pero esta muy enrredada lo que uqiero hacer es mas sensillo

Código Delphi [-]
  begin
if(suiComboBox1.Text='') or (suiComboBox1.Text='Seleccione Número de Identificación')then
   begin
    showmessage('DEBE DIGITAR EL NUMERO DE IDENTIFICACION DEL USUARIO');
    suiComboBox1.SetFocus;
   end
  else
   begin
    if(suiedit3.Text='')then
     begin
      showmessage('DEBE DIGITAR EL CODIGO DEL LIBRO');
      suiedit5.SetFocus;
     end
    else
     begin
            consulta:=suiedit1.text;


                    table1.TableName:='prestamo';
                    table1.open;
                    if not table1.Locate('idprestamo',consulta, []) then
                     begin
                      table1.insert;
                      if(suiComboBox1.Text<>'')then
                       begin
                        table1.fieldbyname('cod_libro').Asstring:=(suiedit3.text);
                          table1.fieldbyname('documento_usuario').Asstring:=(suicombobox1.text);
                           table1.fieldbyname('idprestamo').Asstring:=(suiedit1.text);
                        table1.fieldbyname('fecha').AsDateTime:=(datetimepicker1.Date);
                        Table1.FieldByName('estado').AsString:=(ESTADO1.text);



                      table1.Post;
                      table1.Close;



                        //abriendo tabla 2///
                         table2.open;
                         table2.insert;
                          if (ESTADO1.Text='ABIERTO')then
                          begin
                           table2.fieldbyname('cod_libro').Asstring:=(suiedit3.text);
                           table2.fieldbyname('idprestamo').Asstring:=(suiedit1.text);

                                                                                                     begin

consulta:='select prestamo.idprestamo, from prestamo where idprestamo >=4';
if (consulta>='4') then
begin
  ShowMessage('No Puede Ingresar Mas Prestamos Para Este Usuario');
  end
  else

                      table2.Post;
                      table2.Close;
                      
                        





                       Application.MessageBox('TODOS LOS DATOS HAN SIDO ALMACENADOS SATISFACTORIAMENTE','SIBIBLIO',MB_OK);




                      suiedit1.Clear;
                      suiedit3.Clear;
                      suiComboBox1.Text:='Seleccione Número de Identificación';
                      suiedit5.Clear;
                      suiedit5.SetFocus;
                      end;
                      end;

                    end;
                 end;
               end;
             end;
              end;

veo que mezclan 2 tablas etc... ((no es tarea, es solo que quiero aprender una forma diferente y mas sensilla)).

saludos


La franja horaria es GMT +2. Ahora son las 00:25:10.

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