Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Variant (https://www.clubdelphi.com/foros/showthread.php?t=66013)

Mystery 27-01-2010 19:21:16

Problemas con Variant
 
Hola a todos....
bueno pues resulta que estoy tratando de utilizar un locate para ello creo una variable de tipo variant le doy la longitud en tiempo de ejecucion y sus respectivos valores pero cuando el compilador llega al locate me envia este error. "could not conver variant of type (Array Variant) into type (String)"... he estado leyendo en internet pero todavia no doy con la solucion OK...
aqui les dejo el codigo que he realizado...
Código Delphi [-]
var
  i:integer;
  arr:variant;
begin
  DMDatos.UtilMD.Active:=False;
  DMDatos.UtilMD.IndexName:='primaryKey';
  DMDatos.UtilMD.Active:=True;
  arr:=VarArrayCreate([0, DMDatos.UtilMD.IndexFieldCount], varVariant);
  DMDatos.Util.First;
  while not DMDatos.Util.Eof do begin
    for i:=0 to  DMDatos.UtilMD.IndexFieldCount-1 do
     arr[i]:=DMDatos.Util.FieldByName(DMDatos.UtilMD.IndexFields[i].FieldName).AsString;
    CAD1:=Keys(@DMDatos.Conn, DMDatos.UtilMD.TableName);
    if not DMDatos.UtilMD.Locate(CAD1, arr, [])then
     begin
      //aqui debe o no debe entrar segun el locate.. mas nada...//
     end;

chaooo
sin mas
Mystery

roman 27-01-2010 19:46:44

Pues, al parecer, CAD1 es una arreglo cuando debería ser un string. El primer parámetro de Locate debe ser una cadena que liste los campos sobre los que buscas separados por punto y coma.

// Saludos

Mystery 27-01-2010 19:55:00

exactamente roman... pero keys es una funcion que debuelve el listado de llaves separado por ';'.... ahora lo que no se es si esa variable la tengo que poner entre chr(39).... bueno de todas formas pruebo y te digo ha y disculpa CAD1 es una variable de tipo string... no se porque debe estar pasando esto...

gracias por la sugerencia roman..
Mystery

Mystery 27-01-2010 20:26:10

Hola a todos... bueno pues resulta que era una excepcion que no debia saltar...
pues como todos sabemos esta es la estructura del locate...
Código Delphi [-]
Tabla.Locate(Cadena_Con_llaves, VarArrayOf([Arreglo de los valores de las respectivas llaves de la primera cadena]), []);
por ejemplo para poderme explicar bien...
Código Delphi [-]
Tabla.Locate('key1;key2', VarArrayOf(['A','B']),[]);
pero cuando tabla tiene un solo valor ud hace esto....
Código Delphi [-]
Tabla.Locate('key1', 'A',[]);
jejejeje eso era lo que me pasaba... es un variant pero para una sola llave es un string en la vida real por lo tanto cuando la tabla tiene una sola llave esta linea del codigo anterior sobra...
Código Delphi [-]
arr:=VarArrayCreate([0, DMDatos.UtilMD.IndexFieldCount-1], varVariant);
y por eso era que se lanzaba esta excepcion jejejejeje...
bueno muchas gracias sin mas

Mystery


La franja horaria es GMT +2. Ahora son las 17:15:07.

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