PDA

Ver la Versión Completa : Problemas Formularios para reportes


magnu9
13-07-2007, 16:04:34
Saludos foreros, tengo el siguiente código lo utilizo para un reporte de cliente, en el formulario tengo lo siguiente:
- Tres seis edit dos para cada condición. Ejemplo dos para código de clietes desde el código 4 hasta el 9.

- Dos listbox los cuales utilizo para ordenar. En el listbox1 tengo en el string los campos de la tabla clientes, el listbox2 lo utilizo para obtener los campos de la tabla por lo que quiero ordenar el reporte.

- Tengo dos radiogroup uno para la salida (pantalla, impresora y archivo) el otro para ordenar acendente o decendente.

Problemas:

- Si al tirar el reporte dejo en blanco los edit para los código y coloco sobre los edit de nombre o apellido, me tira un error de imposible convertir varchar en numerico. O sea si quiero filtrar por los edit obligatoriamente debo llenar los edit de código.

- En los listbox por que debo de poner en el string los nombres de los campos de la tabla en este caso Codcli, Nomcli, Apecli etc. Me gustaria y para facilitar al usuario nombrar el string así (Código, Nombre, Apellido, etc.) sin tener que cambiar los nombres de los campos de las tabla. O sea pasarle al sql los nombres del string pero que este lo tome igual que los campos de la tabla.

- Como lanzar el reporte a un archivo.

procedure TrpCliente.btnAceptarClick(Sender: TObject);
var m: integer;
begin
m:= ListBox2.Items.Count;
try
FicCliente:=TFicCliente.Create(self);
if Ordenar.ItemIndex = 0 then begin
FicCliente.querCliente.SQL.Add(' WHERE (cliente.codcli >= '''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+''')');
FicCliente.querCliente.SQL.Add('or (cliente.nomcli LIKE '''+edNombre1.text+'%'' AND cliente.nomcli LIKE '''+edNombre2.text+'%'')');
FicCliente.querCliente.SQL.Add('or (cliente.apecli LIKE '''+edApellido1.text+'%'' AND cliente.apecli LIKE '''+edApellido2.text+'%'')');
IF m=0 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY CODCLI ASC')
else IF m=1 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+'')
else IF m=2 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+'')
else IF m=3 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+','+ListBox2.Items[2]+'')
else IF m=4 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+','+ListBox2.Items[2]+','+ListBox2.Items[3]+'');
FicCliente.querCliente.Open;
end
else begin
FicCliente.querCliente.SQL.Add(' Select codcli,nomcli, dircli, telcli,cedcli, estado, codciu From cliente ');
FicCliente.querCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');
FicCliente.querCliente.SQL.Add('OR cliente.nomcli='''+edNombre1.Text+''' and cliente.nomcli='''+edNombre2.Text+'''');
IF ListBox2.ItemIndex=1 THEN
FicCliente.querCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+', '+ListBox2.Items[1]+'');
end;

FicCliente.querCliente.Open;
FicCliente.Titulo.text := 'Reporte de Cliente';
FicCliente.QuickRep1.DataSet:=FicCliente.querCliente;
If Salida.ItemIndex = 0 then FicCliente.QuickRep1.Preview
else if Salida.ItemIndex= 1 then FicCliente.QuickRep1.Print;
finally
FicCliente.Free;
end;
end;

procedure TrpCliente.btnCancelarClick(Sender: TObject);
begin
rpCliente.Close;
end;
procedure TrpCliente.btnEnviarClick(Sender: TObject);
begin
if listbox1.ItemIndex>=0 then
begin
listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
listbox1.Items.Delete(listbox1.ItemIndex);
end;
end;
procedure TrpCliente.btnTraerClick(Sender: TObject);
begin
if listbox2.ItemIndex>=0 then
begin
listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
listbox2.Items.Delete(listbox2.ItemIndex);
end;
end;
procedure TrpCliente.btnEnvTodClick(Sender: TObject);
var m:integer;
begin
m:=listbox1.Items.Count;
while m>=1 do
begin
listbox1.ItemIndex:=0;
listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
listbox1.Items.Delete(listbox1.ItemIndex);
m:=m-1;
end;
end;
procedure TrpCliente.btnTraerTodoClick(Sender: TObject);
var n:integer;
begin
n:=listbox2.Items.Count;
while n>=1 do
begin
listbox2.ItemIndex:=0;
listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
listbox2.Items.Delete(listbox2.ItemIndex);
n:=n-1;
end;
end;