Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 24-07-2007
Avatar de silver07
silver07 silver07 is offline
Miembro
 
Registrado: jul 2007
Posts: 42
Poder: 0
silver07 Va por buen camino
Thumbs up Factura e Inventario

Muchas gracias Caral a esto me referia, anoche trabaje con los mantenimientos y el diseño de la factura pués hoy en cuanto llegue a casa continuaré aplicando los pasos 9 y 10, de momento todo marcha bien. La verdad que este proyecto me ha inspirado.


Muchas Gracias otra vez por tu tiempo.
Responder Con Cita
  #22  
Antiguo 24-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Paso 11:
Bueno ya el form de factura tiene cara, ya genera los totales, en base a la suma de los articulos que se le coloquen.
Hay que recordar que solo se necesita incluir al cliente y las condiciones una vez, en cuanto a los articulos, pues seran las veces que sea necesario, dependiendo de la venta, por supuesto.
Bueno aqui esta el form ya casi listo, lo unico que faltaria seria imprimir la factura, esto lo hariamos con Qreport, que es el que conozco.
Espero te este sirviendo y a alguien mas.
Saludos

Última edición por Caral fecha: 21-02-2008 a las 18:37:00.
Responder Con Cita
  #23  
Antiguo 24-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Paso 12:
Creacion de la factura imprimida en qreport.
Bueno con este paso creo que ya esta mas o menos listo, por lo menos ya se puede entender un poco como funciona esto de la facturacion, hay otras, muchas otras maneras de hacer esto, pero he querido hacerlo lo mas sencillo posible para que se pueda empezar con delphi.
Espero haber cubierto tu inquietud silver07 y que te sirva a ti y a otros esta pequeña practica.
Saludos

Última edición por Caral fecha: 21-02-2008 a las 18:37:00.
Responder Con Cita
  #24  
Antiguo 25-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Saludos Caral, estaba viendo tu tutorial de facturacion y tengo una pregunta

¿ En donde debo instalar la carpeta con la bd?
¿ En donde debo tener el proyecto de delphi ?
Responder Con Cita
  #25  
Antiguo 25-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pues en realidad no me he puesto a pensar en eso, en cualquier lado supongo.
Simplemente en el Datamodule en el adoconnection le das la direccion que quieras.
Hay otra manera y es un archivo ini, si necesitas te lo explico.
Saludos
Responder Con Cita
  #26  
Antiguo 25-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Como hay una pregunta del amigo tenporal con relacion a donde colocar la Base de datos y el Programa, he querido dar la opción de hacerlo con un archivo .ini como lo indique antes, me parece practico, asi que va.
Para empezar hay que hacer un archivo ini, Abrimos el block de notas y se coloca esto:
Cita:
[BD]
Path="C:\Facturacion.MDB"
[Logon]
Auto="No"
Login=""
Pass=""
Se guarda en este caso con el nombre de BDatos.ini

Como ven aqui le estoy diciendo que la base de datos esta en C:\ y ya sabemos que se llama Facturacion.mdb, si queremos colocar la base de datos en otra carpeta o sub carpeta simplemente le cambiamos la direccion, ejemplo:
Cita:
[BD]
Path="C:\Programa\MiCarpeta\Facturacion.MDB"
[Logon]
Auto="No"
Login=""
Pass=""
Como ven el resto queda igual, simple verdad.
Ahora vamos a hacer que nuestro programa lea este archivo.
Hay que tener en cuenta que el archivo BDatos.ini, tendra que estar en la misma carpeta que el programa.
Ahora abrimos el programa en Delphi, abrimos el datamodule, en el evento OnCreate del datamodule, ponemos esto:
Código Delphi [-]
procedure TDataModule1.DataModuleCreate(Sender: TObject);// esta parte ya la pone Delphi
Var BaseDeDatos, ConStr : String;
    IniFile: TIniFile;
begin
   // Obtiene la ruta y el nombre de la base de datos
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'BDatos.ini');// aqui esta el nombre del archino ini
   BasedeDatos := IniFile.ReadString('BD','Path','');
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDB : Database Password=admin';
   ADOConnection1.ConnectionString := ConStr;
   ADOConnection1.Open;

end;
Ahora en el uses del mismo DataModule ponemos esto:
Cita:
uses
SysUtils, Classes, DB, IniFiles, ADODB, Forms, Dialogs;
Y a funcionar, ahora cada vez que arranque el programa, buscara primero el archivo BDatos.ini, y se conectara a la base de datos, podeis poner la base de datos donde querais, siempre la encontrara, incluso en red, recordad poner el archivo ini en la misma carpeta donde este el programa.
Espero les sirva, la explicacion.
Saludos
Responder Con Cita
  #27  
Antiguo 26-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Siguiendo mi politica de poner los archivos aqui esta el archivo ini, para que lo veáis, por si tenéis dudas.
Saludos

Última edición por Caral fecha: 21-02-2008 a las 18:37:00.
Responder Con Cita
  #28  
Antiguo 28-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Question

Otra pregunta amigo Caral

¿Como evitas que el usuario teclee 2 articulos diferentes asignandole la misma clave del articulo?

Por ejemplo:

articulo: 1
Descripcion: Teclado

articulo: 1
Descripcion: Raton

En el modulo de articulos teclee estos 2 registros con la misma clave y me lo acepto sin problemas, pero no tendria aqui llaves duplicadas ¿como resuelvo esto?

Saludos
Responder Con Cita
  #29  
Antiguo 28-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Supongo que te refieres al form de articulos, lo que quieres hacer es que el ID del articulo no se repita o no tenga uno igual en la tabla, si es asi.
Ya te respondo, un momento.
Saludos
Responder Con Cita
  #30  
Antiguo 28-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno aqui estoy respondiendo a la duda de Tenporal, los cambios los vamos ha hacer en el From de articulos (FArticulos).
Primero:
El Componente DBNavigator1.
A este le quitamos las opciones de Post, Cancel, Refresh., no las necesitamos.
Segundo:
Colocamos un ADOQuery (AdoQuery1) en el from, lo conectamos igual que el adotable1 que tenemos al datamodule en connection (DataModule1.ADOConnection1).
Tercero:
Colocamos un Boton (Guardar) en el Form y en el evento OnClick, ponemos esto:
Código Delphi [-]
 If DBEdit1.Text <> '' then
   Begin
     ADOQuery1.Active:= false;
     ADOQuery1.SQL.Text:= 'Select CodProducto from Articulos Where CodProducto = :cod ';
     ADOQuery1.Parameters.ParamByName('cod').Value := DBEdit1.Text;
     AdoQuery1.Active := true;
     IF ADOQuery1CodProducto.AsString = DBEdit1.Text then
     begin
     MessageDlg('Código ya existe, favor seleccionar otro',mtError,[mbOK],0);
     DBEdit1.Text:= '';
     end
     else
     If ADOTable1.State = dsInsert then
     begin
     ADOTable1.Post;
     ADOTable1.Active:= False;
     ADOTable1.Active := true;
     end;
     end;
Creo que esta facil de entender.
Primero se verifica que el dbedit1 este vacio
Se coloca una consulta al query1 y se busca que, si el parametro es igual al dbedit1 salga un mensaje de lo contrario se grabe en la tabla y se refresque, siempre que la tabla este en modo insert (dsInsert).
Espero sea esto lo que preguntabas y te sirva.
Saludos
Responder Con Cita
  #31  
Antiguo 31-07-2007
tenporal tenporal is offline
Miembro
 
Registrado: may 2007
Posts: 28
Poder: 0
tenporal Va por buen camino
Lo que vi en el diseño de la base de datos en access, es que no tienes un campo definido como llave primaria.

¿cual seria la mejor manera de normalizar la base de datos de access, con llave primaria o sin llave primaria?

Ahora otra pregunta,

Si en vez de guardar el articulo, el usuario da click en el boton cancelar
¿no queda un registro en blanco en la tabla de articulos?

Saludos a tod@s.
Responder Con Cita
  #32  
Antiguo 31-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
1- Access obliga a colocar llaves primarias sobre todo cuando se hacen consultas ligadas, de lo contrario, no lo amerita.
2- Cambiando la colocacion de la sentencia, se puede hacer lo que dices, estudialo un poco, lo entenderas, no deberia crear un registro en blanco.
Recuerda que esta ayuda, no es perfecta, como sabes soy novato, como muchos, solo intento ayudar y dar una luz de lo que se puede hacer.
Saludos
Responder Con Cita
  #33  
Antiguo 12-08-2007
Avatar de novato03
novato03 novato03 is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
novato03 Va por buen camino
Unhappy Asunto

Hola amigo Caral, me descargue el programa paso a paso que hiciste y para analizarlo, pero cuando lo ejecuto me presenta el error cuando le presiono el botón guardar.

Project Factura.exe raised exception class EOleExcenption with message 'El número de valores de consulta y el ´numero de campos de destino son diferentes'¨. Process stopped. Use Step or Run to continue.
Responder Con Cita
  #34  
Antiguo 12-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola novato03
Esto pasa cuando intentas guardar datos incompletos.
En el caso del programa en el form factura, si los edits y combobox que estan en blanco no contienen informacion, genera el error, la logica dice que es una factura y por lo tanto se tiene que formalizar.
Rellena todos los campos vacíos y resulto.
Espero que sea este el problema que me mencionas.
Saludos
Responder Con Cita
  #35  
Antiguo 12-08-2007
Avatar de novato03
novato03 novato03 is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
novato03 Va por buen camino
Red face Asunto

Acabo de completar todos los campos y sale el mismo error.


Project Factura.exe raised exception class EOleException with message 'El número de valores de consulta y el número de campos de destino son diferentes'. Process stopped. Use Step or Run to continue.
Responder Con Cita
  #36  
Antiguo 12-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No tiene por que pasar.
Has tocado algo?
El programa lo tengo y funciona perfectamente, es muy raro.
Revisa el codigo del boton guardar, tiene que estar asi:
Código Delphi [-]
procedure TFFactura.Button1Click(Sender: TObject);
Var
  a,b,c,d,e,f,g,h : real;
begin
 a:= StrTofloat(ECantidad.Text);
 b:= StrTofloat(EMonto.Text);
 d:= StrTofloat(EDesc.Text);
 f:= StrTofloat(EImp.Text);
 c:= a * b;
 e:= c * d / 100;
 g:= (c - e) * f / 100;
 h:= c - e + g;
 ESTotal.Text:= floatToStr(c);
 EDescuento.Text:=floatToStr(e);
 EImpuesto.Text:=floatToStr(g);
 ETotal.Text:= floatToStr(Round(h));

 AdoQuery1.SQL.Text := 'Insert into Factura Values ('+QuotedStr(ECodFactura.Text)+', '+DateToStr(DateTimePicker1.DateTime)+', '+QuotedStr(ECodCliente.Text)+ ', '+QuotedStr(ECodArticulo.Text)+ ', '+QuotedStr(Label9.Caption)+ ', '+QuotedStr(ECantidad.Text)+ ', '+QuotedStr(ComboBox1.Text)+', '+QuotedStr(EOCompra.Text)+', '+
                        QuotedStr(EVendedor.Text)+', '+QuotedStr(EDesc.Text)+', '+QuotedStr(EImp.Text)+', '+QuotedStr(ESTotal.Text)+', '+QuotedStr(EDescuento.Text)+ ', '+QuotedStr(EImpuesto.Text)+ ', '+QuotedStr(ETotal.Text)+')';
 AdoQuery1.ExecSQL;

end;
Como veras el insert recorre los campos y el value revisa los datos.
Copia y pega este codigo, tiene que funcionar.
Saludos
Responder Con Cita
  #37  
Antiguo 12-08-2007
Avatar de novato03
novato03 novato03 is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
novato03 Va por buen camino
Asunto

El código esta de la siguiente manera...


Código Delphi [-]
procedure TFFactura.Button1Click(Sender: TObject);
Var
  a,b,c,d,e,f,g,h : real;
begin
 a:= StrTofloat(ECantidad.Text);
 b:= StrTofloat(EMonto.Text);
 d:= StrTofloat(EDesc.Text);
 f:= StrTofloat(EImp.Text);
 c:= a * b;
 e:= c * d / 100;
 g:= (c - e) * f / 100;
 h:= c - e + g;
 ESTotal.Text:= floatToStr(c);
 EDescuento.Text:=floatToStr(e);
 EImpuesto.Text:=floatToStr(g);
 ETotal.Text:= floatToStr(Round(h));
 AdoQuery1.SQL.Text := 'Insert into Factura Values ('+QuotedStr(ECodFactura.Text)+', '+DateToStr(DateTimePicker1.DateTime)+', '+QuotedStr(ECodCliente.Text)+ ', '+QuotedStr(ECodArticulo.Text)+ ', '+QuotedStr(Label9.Caption)+ ', '+QuotedStr(ECantidad.Text)+ ', '+QuotedStr(ComboBox1.Text)+', '+QuotedStr(EOCompra.Text)+', '+
                        QuotedStr(EVendedor.Text)+', '+QuotedStr(EDesc.Text)+', '+QuotedStr(EImp.Text)+', '+QuotedStr(ESTotal.Text)+', '+QuotedStr(EDescuento.Text)+ ', '+QuotedStr(EImpuesto.Text)+ ', '+QuotedStr(ETotal.Text)+')';
 AdoQuery1.ExecSQL;
end;

y la tabla de factura, contiene los siguientes campos:


CodFactura (Número)
Fecha
CodCliente (Número)
Terminos (Texto)
OrdenCompra (Texto)
CodVendedor (Texto)
Excento (si/no)
TasaImpuesto (Número)
Anulada (si/no)
MntEnvio (Fecha)
MntSubTotal (Número)
MntDescuento (Número)
MntImpuesto (Número)
MntTotal (Número)
MntContado (Número)
MntCheque (Número)
MntTarjeta (Número)
MntOtros (Número)
Saldo (Número)
Pagado (Número)
CodArticulo (Número)
Responder Con Cita
  #38  
Antiguo 12-08-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
El paso 9, explica lo que te esta pasando.
La tabla fue modificada en ese paso, quedo asi:

Campos:
CodFactura (Número)
Fecha
CodCliente (Número)
CodArticulo (Texto)
Descripcion (Texto)
Cantidad (Numero)
Terminos (Texto)
OrdenCompra (Texto)
CodVendedor (Texto)
Excento (Numero)
TasaImpuesto (Número)
MntSubTotal (Número)
MntDescuento (Número)
MntImpuesto (Número)
MntTotal (Número)

Revisalo, si tienes mas dudas, ya las resolveremos.
Saludos
Responder Con Cita
  #39  
Antiguo 12-08-2007
Avatar de novato03
novato03 novato03 is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
novato03 Va por buen camino
Asunto

Muchas gracias amigo Caral. Ya esta resuelto
Pero tengo que digitar el precio y el impuesto.
No habrá alguna forma de hacerlo automático?


Gracias por la ayuda Amigo Caral...
Responder Con Cita
  #40  
Antiguo 12-08-2007
Avatar de novato03
novato03 novato03 is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
novato03 Va por buen camino
Red face Asunto

Disculpa amigo Caral, pero el unit(UFClientes) cuando ejecuto el programa me presenta el siguiente error:


Cannot open file "C:\UFClientes.pas". El sistema no puede hallar el archivo especificado.

Para resolver el problema he tenido que colocar ese form en disco "C:\ " libremente solo así funciona.

Hay alguna forma resolver este problema?

Gracias anticipadas...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Reducir Inventario por medio factura josejose Varios 4 26-01-2007 01:23:29
Costo de Inventario NickName SQL 4 09-10-2006 06:30:31
Inventario de Hardware vichovi API de Windows 3 03-01-2005 15:35:10
como planear un inventario peps gmontes Debates 0 21-12-2004 17:01:10
Controlar inventario? AbcXxx Varios 4 12-06-2004 00:54:13


La franja horaria es GMT +2. Ahora son las 07:51:55.


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