Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2004
Sinaloense Sinaloense is offline
Miembro
 
Registrado: oct 2003
Posts: 139
Poder: 23
Sinaloense Va por buen camino
El equipo mas bajo en el que corre es un Pentium III de 800 Mhz, 128 RAM y disco duro de 40 Gb a 5400 rpm


128 de memoria es muy bajo para trabajar con base de datos con imagenes, teniendo en cuenta que Windows usa al menos 92 y el motor de base de datos access al menos 32, asi que solo te queda la memoria virtual del disco duro la cual no es muy eficiente en un de 5400 rpm.
Responder Con Cita
  #2  
Antiguo 30-11-2004
Avatar de sercornejov
sercornejov sercornejov is offline
Miembro
 
Registrado: may 2003
Ubicación: Neiva - Colombia
Posts: 88
Poder: 24
sercornejov Va por buen camino
gracias a todos.

me suena harto lo de dividir los archivos en varios directorios, pueden ser, inicialmente, 10 (0,1,2,3,4,5,6,7,8,9) de inicio de cédula.

bueno, creo que según lo que dicen, la idea de guardar la foto en la bese de datos debe ser descartada...

Gracias de nuevo.
__________________
En Colombia hay muchos, pero muchos colombianos muy buenos. Los violentos son pocos y los vamos a controlar...
Responder Con Cita
  #3  
Antiguo 30-11-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
Desconozco con exactitud la forma en que estás accediendo a tus tablas pero hace un rato me creé una base con 74000 registros (iban a ser 50000 pero por error puse 500000 y tuve que cortar por lo sano ) cada uno con su respectiva ruta a la foto. Obvio que no me conseguí 74000 fotos sino que utilicé la misma, eso sí 74000 copias (debo recordar borrarlas) y los accesos son muy, muy aceptables.

La conexión a Access la hice con ADO tanto con un ADOQuery para búsqueda e inserción, como con un ADOTable.

¡Ah! Y todas las fotos en el mismo directorio.

// Saludos
Responder Con Cita
  #4  
Antiguo 01-12-2004
Avatar de sercornejov
sercornejov sercornejov is offline
Miembro
 
Registrado: may 2003
Ubicación: Neiva - Colombia
Posts: 88
Poder: 24
sercornejov Va por buen camino
Bueno.

Será la máquina?
Será la manera de acceder a los datos desde el aplicativo?
Yo tambien uso los ADO para la conección, en mi equipo (Pentium IV de 2.8, 512 MB ram ddr 400 Mhz y D.D. de 80 Gb SATA) todo es muy bueno tambien...
La idea es poder hacer algo que funcione mejor...

Gracias...
__________________
En Colombia hay muchos, pero muchos colombianos muy buenos. Los violentos son pocos y los vamos a controlar...
Responder Con Cita
  #5  
Antiguo 01-12-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 sercornejov
Será la máquina?
Será la manera de acceder a los datos desde el aplicativo?
Yo tambien uso los ADO para la conección, en mi equipo (Pentium IV de 2.8, 512 MB ram ddr 400 Mhz y D.D. de 80 Gb SATA) todo es muy bueno tambien...
Este equipo debiera bastar. Recordemos que estamos hablando de una tabla que almacena las rutas de las imágenes y no las imágenes mismas.

Confirmas que usas ADO pero no das detalles. Quizá sirva si nos pones un pequeño ejemplo de uso: para insertar un registro, para buscar un registro, etc., indicando las componentes exactas que usas (TADOataSet, TAdoCommand, TAdoTable, TAdoQuery, etc.) y los parámetros de conexión. Cosas como el tipo de cursor, etc.

// Saludos
Responder Con Cita
  #6  
Antiguo 01-12-2004
Avatar de sercornejov
sercornejov sercornejov is offline
Miembro
 
Registrado: may 2003
Ubicación: Neiva - Colombia
Posts: 88
Poder: 24
sercornejov Va por buen camino
Los componentes que uso:

para conectar: TADOConnection
Tablas: TADOTable
Queries: TADOQuery

cuando se entra una cedula en un TEdit (normal), al salir (con TAB para pasar al Tedit del nombre del personaje) está este evento:

Código:
procedure TfrmEntrada.edtIDExit(Sender: TObject);
var
  ID:string;
  iti:integer;
  total:double;
  semana,hoy:TDateTime;

begin
  // para saber si el query que trae la historia del personaje está activado

  if not dmppal1.adoqryHisVisTot.Active then
		dmppal1.adoqryHisVisTot.Active:=true;
  // toma la cedula del personaje
  ID:=edtID.Text;
  // inicializa la tabla de visitantes al primer record
  dmppal1.adotblVisitas.First;
  // los visitantes actuales se guardan en una tabla que se llama ADENTRO
  // si la nueva cedula está adentro, no permite una segunda entrada
  // esto es porque la gente se le olvida entregar el sticker a la salida
  nohasalido:=dmppal1.adotblAdentro.Locate('VIS_CC',id,[loCaseInsensitive]);
  if nohasalido then
    begin
      showmessage('El visitante con CC '+dmppal1.adotblAdentroVIS_CC.Value+
      	' no ha salido aún de la Gobernación.  Entro el '+
        dmppal1.adotblAdentroVTA_IN.AsString);
      // oculta los label que muestran el historial del personaje
      lblTotTiempo1.Visible:=false;
      lblTotTiempo2.Visible:=false;
      lblTotSemana1.Visible:=false;
      lblTotSemana2.Visible:=false;
      lblTotHoy1.Visible:=false;
      lblTotHoy2.Visible:=false;
      // deja en blanco el edit de cedula para una nueva entrada
      edtID.Text:='';
      edtVisNombre.Text:='';
      imgVisFoto.Picture.Bitmap:=nil;// el Timage de la foto lo deja nulo
      dbgVisitasEnt.Visible:=False;
      bbtnRegistrar.Enabled:=False;// inhabilita el registro
      sbtnCambiarFotoVis.Visible:=False;
      sbtnCancelVisFoto.Visible:=False;
      dbmmoVisNota.Visible:=false;
      sbtnOKFoto.Visible:=False;
    end;
  // si existe coloca el cursor en el registro del personaje
  existe:=dmppal1.adotblVisitante.Locate('VIS_CC',id,[loCaseInsensitive]);
  if existe then
  	begin
    	if dmppal1.adotblVisitanteVIS_ESTADO.Value=0 then // si esta prohibida la entrada del personaje:
      	begin
          edtID.Font.Color:=clwhite;
          edtID.Font.Style:=[fsBold];
          edtID.Color:=clRed;
          edtVisNombre.Font.Color:=clwhite;
          edtVisNombre.Font.Style:=[fsBold];
          edtVisNombre.Color:=clRed;
          dbmmoVisNota.Visible:=true;
          dbmmoVisNota.Font.Color:=clwhite;
          dbmmoVisNota.Font.Style:=[fsBold];
          dbmmoVisNota.Color:=clRed;
          bbtnRegistrar.Enabled:=false;
        end
        else // si sí puede entrar:
        	begin
            edtID.Font.Color:=clWindowText;
            edtID.Font.Style:=[];
            edtID.Color:=clWindow;
            edtVisNombre.Font.Color:=clWindowText;
            edtVisNombre.Font.Style:=[];
            edtVisNombre.Color:=clWindow;
            dbmmoVisNota.Visible:=true;
            dbmmoVisNota.Font.Color:=clWindowText;
            dbmmoVisNota.Font.Style:=[];
            dbmmoVisNota.Color:=clWindow;
            bbtnRegistrar.Enabled:=true;
          end;
      edtVisNombre.Text:=dmppal1.adotblVisitanteVIS_NOMBRE.Value;
      if FileExists(rutafotos+id+'.jpg') then  // si el archivo existe en el directorio de fotos:
      	begin
      		imgVisFoto.Picture.LoadFromFile(rutafotos+id+'.jpg');
          fotosel:=true;
        end
        else  // si no, coloca un archivo de nofoto.jpg
        	begin 
          	imgVisFoto.Picture.LoadFromFile(rutafotos+'nofoto.jpg');
            fotosel:=false;
          end;
      // se habilitan los controles para cambiar la foto y otros...
      sbtnCambiarFotoVis.Visible:=true;
      sbtnCancelVisFoto.Visible:=true;
      dmppal1.adoqryHisVisTot.Active:=false; // para saber la historia del peronaje
      dmppal1.adoqryHisVisTot.Parameters.Items[0].value:=ID;
      dmppal1.adoqryHisVisTot.Active:=true;
      lblTotTiempo1.Visible:=true;
      lblTotTiempo2.Visible:=true;
      lblTotSemana1.Visible:=true;
      lblTotSemana2.Visible:=true;
      lblTotHoy1.Visible:=true;
      lblTotHoy2.Visible:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisTot.RecordCount do
      	begin
        	total:=total+SecondsBetween(dmppal1.adoqryHisVisTotVTA_OUT.Value,dmppal1.adoqryHisVisTotVTA_IN.Value);
          dmppal1.adoqryHisVisTot.Next;
        end;
			lblTotTiempo2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      semana:=incday(now,-7);
      dmppal1.adoqryHisVisSem.Active:=false;
      dmppal1.adoqryHisVisSem.Parameters.Items[0].Value:=ID;
      dmppal1.adoqryHisVisSem.Parameters.Items[1].Value:=semana;
      dmppal1.adoqryHisVisSem.Active:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisSem.RecordCount do
        begin
      		total:=total+SecondsBetween(dmppal1.adoqryHisVisSemVTA_OUT.Value,dmppal1.adoqryHisVisSemVTA_IN.Value);
          dmppal1.adoqryHisVisSem.Next;
      	end;
			lblTotSemana2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      hoy:=today;
      dmppal1.adoqryHisVisHoy.Active:=false;
      dmppal1.adoqryHisVisHoy.Parameters.Items[0].Value:=ID;
      dmppal1.adoqryHisVisHoy.Parameters.Items[1].Value:=hoy;
      dmppal1.adoqryHisVisHoy.Active:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisHoy.RecordCount do
        begin
      		total:=total+SecondsBetween(dmppal1.adoqryHisVisHoyVTA_OUT.Value,dmppal1.adoqryHisVisHoyVTA_IN.Value);
          dmppal1.adoqryHisVisHoy.Next;
      	end;
			lblTotHoy2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      dbgVisitasEnt.Visible:=true;
		  bbtnRegistrar.Enabled:=true;
    end
    else
    	begin
        edtVisNombre.SetFocus;
        sbtnOKFoto.Visible:=true;
        sbtnCancelVisFoto.Visible:=true;
        bbtnRegistrar.Enabled:=true;
      end;
end;
en el boton de REGISTRAR, que es el que llena las tablas:

Código:
procedure TfrmEntrada.bbtnRegistrarClick(Sender: TObject);
var
	hoy:TDateTime;

begin
	if edtID.Text='' then
    begin
      showmessage('No ha Introducido la cédula');
      exit;
    end;
  if not fotosel then
    begin
      showmessage('No ha tomado la foto');
      exit;
    end;
  if not areasel then
    begin
      showmessage('No ha seleccionado un AREA para el visitante');
      exit;
    end;
	if not empleadosel then
    begin
      showmessage('No ha seleccionado un EMPLEADO para el visitante');
      exit;
    end;
  if not existe then // esta variable es global. si existe es FALSE inserta un registro en visitantes
		begin
      with dmppal1 do
        begin
          hoy:=now;
          // rutina de visitante
          adotblVisitante.Insert;
          adotblVisitanteVIS_CC.Value:=edtID.Text;
          adotblVisitanteVIS_NOMBRE.Value:=edtVisNombre.Text;
          adotblVisitanteVIS_FOTO.Value:=rutafotos+edtID.Text+'.jpg';
          adotblVisitanteVIS_ULTVIS.Value:=hoy;
          adotblVisitanteVIS_ESTADO.Value:=1;
          adotblVisitanteUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
          adotblVisitante.Post;
        end;
    end
    else // si existe es TRUE, solo actualiza la fecha de la última visita
      with dmppal1 do
        begin
          hoy:=now;
          // rutina de visitante
          adotblVisitante.edit;
          adotblVisitanteVIS_ULTVIS.Value:=hoy;
          adotblVisitanteUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
          adotblVisitante.Post;
        end;
  with dmppal1 do // aqui se llena la tabla de VISITAS
  	begin
      // rutina de visita
      adotblVisitas.Insert;
      adotblVisitasVTA_IN.Value:=hoy;
      adotblVisitasVTA_OUT.Value:=hoy;
      adotblVisitasARE_ID.Value:=adoqryAreasEmplARE_ID.Value;
      adotblVisitasEMP_ID.Value:=adoqryAreasEmplEMP_ID.Value;
      adotblVisitasVIS_ID.Value:=adotblVisitanteVIS_ID.Value;
      adotblVisitasUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
      adotblVisitas.Post;
      dmppal1.adotblAdentro.insert; // aqui se llena la tabla de ADENTRO
      dmppal1.adotblAdentroVTA_ID.Value:=dmppal1.adotblVisitasVTA_ID.Value;
      dmppal1.adotblAdentroVTA_IN.Value:=dmppal1.adotblVisitasVTA_IN.Value;
      dmppal1.adotblAdentroVTA_OUT.Value:=dmppal1.adotblVisitasVTA_OUT.Value;
      dmppal1.adotblAdentroVIS_CC.Value:=dmppal1.adotblVisitaslk_VisCC.Value;
      dmppal1.adotblAdentroVIS_NOMBRE.Value:=dmppal1.adotblVisitaslk_Visitante.Value;
      dmppal1.adotblAdentroARE_NOMBRE.Value:=dmppal1.adotblVisitaslk_Area.Value;
      dmppal1.adotblAdentroEMP_NOMBRE.Value:=dmppal1.adotblVisitaslk_Empleado.Value;
      dmppal1.adotblAdentroUSU_USUARIO.Value:=dmppal1.adotblVisitasUSU_USUARIO.Value;
      dmppal1.adotblAdentro.Post;
    end;
    // imprime
    rfrmStikerPeq:=TrfrmStikerPeq.create(self);
    rfrmStikerPeq.qrlblEntrada.Caption:=DateTimetoStr(dmppal1.adotblVisitasVTA_IN.Value);
    rfrmStikerPeq.qrlblVisitante.Caption:=dmppal1.adotblVisitaslk_Visitante.Value;
    rfrmStikerPeq.qrlblAreaVis.Caption:=dmppal1.adotblVisitaslk_Area.Value;
    rfrmStikerPeq.qreanVisCC.BarCode:=dmppal1.adotblVisitaslk_VisCC.Value;
    rfrmStikerPeq.qrStickerPeq.Print;
    rfrmStikerPeq.Close;
    rfrmStikerPeq.Free;
    // Limpiar el formulario
    lblTotTiempo1.Visible:=false;
    lblTotTiempo2.Visible:=false;
    lblTotSemana1.Visible:=false;
    lblTotSemana2.Visible:=false;
    lblTotHoy1.Visible:=false;
    lblTotHoy2.Visible:=false;
    edtID.Text:='';
    edtVisNombre.Text:='';
    imgVisFoto.Picture.Bitmap:=nil;
    dbgVisitasEnt.Visible:=False;
    bbtnRegistrar.Enabled:=False;
    sbtnCambiarFotoVis.Visible:=False;
    sbtnCancelVisFoto.Visible:=False;
    sbtnOKFoto.Visible:=False;
    dbgrdAreEntrada.SelectedRows.Clear;
    dbgrdEmplEntrada.SelectedRows.Clear;
    edtID.Font.Color:=clWindowText;
    edtID.Font.Style:=[];
    edtID.Color:=clWindow;
    edtVisNombre.Font.Color:=clWindowText;
    edtVisNombre.Font.Style:=[];
    edtVisNombre.Color:=clWindow;
    dbmmoVisNota.Font.Color:=clWindowText;
    dbmmoVisNota.Font.Style:=[];
    dbmmoVisNota.Color:=clWindow;
    dbmmoVisNota.Visible:=false;
    areasel:=false;
    empleadosel:=false;
    dmppal1.adotblAdentro.First;
    edtID.SetFocus;
end;
bueno. Pues se que se abusa de los queries para la historia del personaje...
Cuando los tengo en red, la búsqueda del archivo de fotos si es realmente lenta...

Es muy descabellado incluir la foto dentro de la base de datos???

Saludos desde Colombia...

Sergio
__________________
En Colombia hay muchos, pero muchos colombianos muy buenos. Los violentos son pocos y los vamos a controlar...
Responder Con Cita
  #7  
Antiguo 01-12-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
¡Uf!

Ahora mismo no puedo revisar todo pero vuelvo a preguntarte (ahora más específico):

¿Qué valor tienes en la propiedad CursorLocation del ADOTable y del ADOQuery?

El valor por defecto es clUseClient cuya descripción es:

Cita:
Empezado por ayuda de Delphi
A client-side cursor offers more flexibility. All data is retrieved to the local machine and then operated on there, allowing operations not normally supported by servers like sorting and resorting the data and additional filtering. SQL statements are executed at the server, so for statements that restrict the result set with a WHERE clause, only the reduced result set is retrieved to a local cursor.
Es decir, todos los datos viajan al cliente. Con 50000 registros esto puede ser un suicidio. Si éste es el valor que tienes entonces cámbialo por clUseServer y prueba a ver si cambia el rendimiento.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi