Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   ListView con sql Server (https://www.clubdelphi.com/foros/showthread.php?t=96005)

giantonti1801 14-12-2022 23:28:03

ListView con sql Server
 
hola amigos, trato de llevar unos campos de Sql Server a los item de listview algunos de ellos fueron creados por mi, no he logrago conseguir la forma de hacerlo.

Código Delphi [-]
procedure TForminicio.Button1Click(Sender: TObject);
var
vItemList : TListViewItem;
StreamIMG : TStream;
begin
UniQueryVisita.Close;
UniQueryVisita.Open;
while not UniQueryVisita.Eof do
 begin
   vItemList := lvClientes.items.Add;
   StreamIMG := TMemoryStream.Create;
   if UniQueryVisitafoto.IsNull then
      IMG_Vendor.bitmap.saveToStream(streamIMG)
      else
      UniQueryVisitafoto.saveToStream(streamIMG);
      vItemList.bitmap := Circle1.MakeScreenshot;
//      vItemList.text := UniQueryVisitaNom_Vis.AsString;
//      vItemList.
//    vItemList.Text  := UniQueryVisitaRut__Vis.AsString;
      UniQueryVisita.Next;
      end;
end;

Adjunto imagen tambien del ide, talvez con eso puede ser mas de ayuda para el que realmente conoce del tema.

Neftali [Germán.Estévez] 15-12-2022 09:19:40

No necesitas hacerlo por código, utiliza los VisualBindings para hacer lo que necesitas.
Define los elementos de la lista para que incluyan una imagen, por ejemplo con el tipo ImageListItemShowCheck (o cualquier oro que incluya la imagen).



Define los campos persistentes para tu consulta.



Y luego visualmente, hacer el "binding".


giantonti1801 15-12-2022 10:53:33

Efectivamente así lo tengo funcionando por ahora esto ya lo tenia claro pero de esta forma no me sirve ya que depende de unas condiciones que le le apliquen en una consultas del.sql debe mostrar los datos como por ejemplo inicio de sección para que solo se presten los datos en la consulta de esta persona, también otras condiciones que están en los edti.text en los largos del programa y no puedo hacerlo por binding obligatoriamente tengo que hacerlo en tiempo de ejecución.

giantonti1801 16-12-2022 13:13:28

Cita:

Empezado por giantonti1801 (Mensaje 549581)
hola amigos, trato de llevar unos campos de Sql Server a los item de listview algunos de ellos fueron creados por mi, no he logrago conseguir la forma de hacerlo.

Código Delphi [-]
procedure TForminicio.Button1Click(Sender: TObject);
var
vItemList : TListViewItem;
StreamIMG : TStream;
begin
UniQueryVisita.Close;
UniQueryVisita.Open;
while not UniQueryVisita.Eof do
 begin
   vItemList := lvClientes.items.Add;
   StreamIMG := TMemoryStream.Create;
   if UniQueryVisitafoto.IsNull then
      IMG_Vendor.bitmap.saveToStream(streamIMG)
      else
      UniQueryVisitafoto.saveToStream(streamIMG);
      vItemList.bitmap := Circle1.MakeScreenshot;
//      vItemList.text := UniQueryVisitaNom_Vis.AsString;
//      vItemList.
//    vItemList.Text  := UniQueryVisitaRut__Vis.AsString;
      UniQueryVisita.Next;
      end;
end;

Adjunto imagen tambien del ide, talvez con eso puede ser mas de ayuda para el que realmente conoce del tema.

Buen dia alguien puedes ayudarme con eso?

cloayza 16-12-2022 16:29:36

Me tome algunas licencias con los nombres de los campos, pero es un ejemplo de otro método para cargar datos a un TListView.

Código Delphi [-]
procedure TForminicio.ClienteAddListView(Cliente_Id: integer;
                                         Cliente_Nombre, 
                     Cliente_Email: string;
                                         Cliente_Foto: TBitmap);
var
    item: TListViewItem;
begin
    item := lvClientes.Items.Add;
    item.Height := 90;
    item.Tag    := Cliente_Id;

    {!PRECAUCION!}
    {Los nombre de los objetos del Item son sencibles a minusculas y mayusculas: 'txtCliente_Nombre', 'txtCliente_Email'...}

    TListItemText(item.Objects.FindDrawable('txtCliente_Nombre')).Text := Cliente_Nombre;
    TListItemText(item.Objects.FindDrawable('txtCliente_Email')).Text := Cliente_Email;
  
    if Cliente_Foto <> nil then
       TListItemImage(item.Objects.FindDrawable('imgCliente_Foto')).Bitmap := Cliente_Foto;
end;

procedure TFrmPrincipal.ClientesListar;
var
    Cliente_foto: TBitmap;
    foto_stream: TStream;
begin
    lvClientes.BeginUpdate;
    lvClientes.Items.Clear;

    with UniQueryVisita do
    begin
        Active := false;
        SQL.Clear;
        SQL.Add('select * from Clientes order by Cliente_id');
        Active := true;

        while NOT eof do
        begin
             Cliente_Foto := nil;
       
       if not FieldByName('Cliente_Foto').IsNull then
             begin
                foto_stream := CreateBlobStream(FieldByName('Cliente_Foto'), TBlobStreamMode.bmRead);
        
                Cliente_Foto:= TBitmap.Create;
                Cliente_Foto.LoadFromStream(foto_stream);

                foto_stream.DisposeOf;
            end;

            ClienteAddListView(FieldByName('Cliente_id').AsInteger,
                               FieldByName('Cliente_Nombre').AsString,
                               FieldByName('Cliente_email').AsString,
                               Cliente_Foto);

            Next;
        end;
    end;

    lvClientes.EndUpdate;
end;

Espero te ayude, saludos cordiales

giantonti1801 17-12-2022 01:33:13

Cita:

Empezado por cloayza (Mensaje 549601)
Me tome algunas licencias con los nombres de los campos, pero es un ejemplo de otro método para cargar datos a un TListView.

Código Delphi [-]
procedure TForminicio.ClienteAddListView(Cliente_Id: integer;
                                         Cliente_Nombre, 
                     Cliente_Email: string;
                                         Cliente_Foto: TBitmap);
var
    item: TListViewItem;
begin
    item := lvClientes.Items.Add;
    item.Height := 90;
    item.Tag    := Cliente_Id;

    {!PRECAUCION!}
    {Los nombre de los objetos del Item son sencibles a minusculas y mayusculas: 'txtCliente_Nombre', 'txtCliente_Email'...}

    TListItemText(item.Objects.FindDrawable('txtCliente_Nombre')).Text := Cliente_Nombre;
    TListItemText(item.Objects.FindDrawable('txtCliente_Email')).Text := Cliente_Email;
  
    if Cliente_Foto <> nil then
       TListItemImage(item.Objects.FindDrawable('imgCliente_Foto')).Bitmap := Cliente_Foto;
end;

procedure TFrmPrincipal.ClientesListar;
var
    Cliente_foto: TBitmap;
    foto_stream: TStream;
begin
    lvClientes.BeginUpdate;
    lvClientes.Items.Clear;

    with UniQueryVisita do
    begin
        Active := false;
        SQL.Clear;
        SQL.Add('select * from Clientes order by Cliente_id');
        Active := true;

        while NOT eof do
        begin
             Cliente_Foto := nil;
       
       if not FieldByName('Cliente_Foto').IsNull then
             begin
                foto_stream := CreateBlobStream(FieldByName('Cliente_Foto'), TBlobStreamMode.bmRead);
        
                Cliente_Foto:= TBitmap.Create;
                Cliente_Foto.LoadFromStream(foto_stream);

                foto_stream.DisposeOf;
            end;

            ClienteAddListView(FieldByName('Cliente_id').AsInteger,
                               FieldByName('Cliente_Nombre').AsString,
                               FieldByName('Cliente_email').AsString,
                               Cliente_Foto);

            Next;
        end;
    end;

    lvClientes.EndUpdate;
end;

Espero te ayude, saludos cordiales

gracias por tu respuesta amigo, pero fijate tengo toda la tarde tratando de indentificar cuales losn los nombres de los campos de la base de dato y cuales son los nombres de las cajas donde voy a pasar los datos

Código Delphi [-]
procedure TForminicio.ClientesListar;
var
    Cliente_foto: TBitmap;
    foto_stream: TStream;
begin
    lvClientes.BeginUpdate;
    lvClientes.Items.Clear;

    with UniQueryVisita do
    begin
        Active := false;
        SQL.Clear;
        SQL.Add('select * from Visitas');
        Active := true;

        while NOT eof do
        begin
             Cliente_Foto := nil;

       if not FieldByName('Foto').IsNull then
             begin
                foto_stream := CreateBlobStream(FieldByName('Foto'), TBlobStreamMode.bmRead);

                Cliente_Foto:= TBitmap.Create;
                Cliente_Foto.LoadFromStream(foto_stream);

                foto_stream.DisposeOf;
            end;

            ClienteAddListView(FieldByName('Cliente_RUT').AsString,
                               FieldByName('Cliente_Nombre').AsString,
                               FieldByName('Cliente_email').AsString,
                               FieldByName('Cliente_Apellido').AsString,
                               FieldByName('Aceptacion_visita').AsString,
                               FieldByName('Cliente_comentario').AsString,
                               Cliente_Foto);

            Next;
        end;
    end;

    lvClientes.EndUpdate;
end;


Código Delphi [-]
procedure TForminicio.ClienteAddListView(Cliente_RUT, Cliente_Nombre,
  Cliente_Apellido, Cliente_comentario, Aceptacion_visita,
  Cliente_Email: string; Cliente_Foto: TBitmap);
var
    item: TListViewItem;
begin
    item := lvClientes.Items.Add;
    item.Height := 90;
    //item.Tag    := Cliente_RUT;

    {!PRECAUCION!}
    {Los nombre de los objetos del Item son sencibles a minusculas y mayusculas: 'txtCliente_Nombre', 'txtCliente_Email'...}

    TListItemText(item.Objects.FindDrawable('Nom_Visita_txt')).Text := Cliente_Nombre;
    TListItemText(item.Objects.FindDrawable('ACT_visita_txt')).Text := Cliente_Apellido;
    TListItemText(item.Objects.FindDrawable('txtNome')).Text := Cliente_RUT;
    TListItemText(item.Objects.FindDrawable('txtEmail')).Text := Aceptacion_visita;
    TListItemText(item.Objects.FindDrawable('txtEndereco')).Text := Cliente_comentario;

    if Cliente_Foto <> nil then
       TListItemImage(item.Objects.FindDrawable('imgVendedor')).Bitmap := Cliente_Foto;
end;


La franja horaria es GMT +2. Ahora son las 19:07:52.

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