Ver Mensaje Individual
  #6  
Antiguo 05-10-2007
Avatar de duilioisola
[duilioisola] duilioisola is online now
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Por lo que entiendo:
- con BUSCARMODELO posicionas una tabla en un registro
- con ENCONTROMODELO haces algo con los datos de ese registro.

Supongo que la solución sería que BUSCARMODELO te devolviera los datos que vas a uar en ENCONTROMODELO y se los pasaras.
(n, grupo y modelo deberán ser variable globales al thread)
Quizás también agregaría un tGrupo.Close después de la consulta en BUSCARMODELO, si no es necesario que quede abierto.

Código Delphi [-]
procedure Tform1.procesar(s:String;n:Integer);
Begin
   if (self.procesando_list.CountThen
   Begin
      if (objeto<>'') Then
      Begin
         self.procesando_list.Items.Add(s);
         // antes enviaba siempre el mismo fichero
         // enviar(s,self.c_config.Items.Strings[1] + 'objetos\' + objeto)
         // ahora tiene que buscar en la base de datos segun el prefijo de la direccion, el fichero que corresponda
         buscarModelo(s, n, grupo, modelo);
      End;
   End;
End;




procedure Tform1.buscarModelo(s:String; var n, grupo, modelo : integer);
var
i:Integer;
coma,servicios_dato,dato:String;
servicios: TBFBluetoothServices;
servicio: TBFBluetoothService;
prefijo: String;
Begin
   servicios := EnumServices(s,true,Dongle);
   servicios_dato := '';
   coma := '';
   for i:=0 to servicios.Count - 1 do
   Begin
      servicio := servicios.Service[i];
      dato := coma + inttostr(i) + ':' + inttostr(servicio.Channel) + ':' + inttostr(servicio.UUID16);
      servicios_dato := servicios_dato + dato;
      coma := ',';
   End;
   prefijo := stringReplace(s,':','',[rfReplaceAll]);
   prefijo := copy(prefijo,2,6);
   // segun el prefijo de la direccion y los servicios pertenece a un grupo
   d2.tgrupo.Close;
   d2.tgrupo.SQL.Clear;
   d2.tgrupo.SQL.Add('SELECT modelos.id, modelos.marca, modelos.modelo, agrupar.grupo');
   d2.tgrupo.SQL.Add('FROM modelos');
   d2.tgrupo.SQL.Add('INNER JOIN agrupar ON (modelos.id = agrupar.modelo)');
   d2.tgrupo.SQL.Add('WHERE (modelos.prefijo = ' + '''' + prefijo + '''' + ')');
   d2.tgrupo.SQL.Add('AND (modelos.servicios = ' + '''' + servicios_dato + '''' + ')');
   d2.tgrupo.Open;

   n := datos.RecordCount;
   grupo := datos.fieldByName('grupo').Value;
   modelo := datos.fieldByName('id').Value;
   tGrupo.Close {Esto solo si no se necesita para otra cosa}
End;

procedure Tform1.encontroModelo(datos:TDataSet; n, grupo, modelo : integer);
var
objeto2:String;
p1,largo,n, grupo, modelo, il:Integer;
s,busca:String;
Begin
   { viene como parámetro
   n := datos.RecordCount;}
   if (n>0) Then
   Begin
      { vienen como parámetros
      grupo := datos.fieldByName('grupo').Value;
      modelo := datos.fieldByName('id').Value;
      }
   End
   else
   Begin
      grupo := 0;
      modelo := 0;
   End;
   // esto es porque guardo la lista de ficheros en una lista pero le pongo 1,fich.. 2,fich etc...
   busca := inttostr(grupo) + ',';
   il := BuscarEnLista(lista_objetos.Items,busca);
   objeto2 := lista_objetos.Items.Strings[il];
   largo := length(objeto2);
   p1 := pos(',',objeto2);
   objeto2 := copy(objeto2,p1+1,largo - p1);
   // ahora debera enviar el fichero encontrado
   // de donde saco la dirección???
   enviar(ACALADIRECCION,self.c_config.Items.Strings[1] + 'objetos\' + objeto2)
end;



// en la unidad de las base de datos:
procedure Td2.tgrupoAfterOpen(DataSet: TDataSet);
begin
   form1.encontroModelo(DataSet, n, grupo, modelo);
end;

Última edición por duilioisola fecha: 05-10-2007 a las 14:40:32.
Responder Con Cita