Importação de dados

Delphi

06/08/2009

Pessoal, estou importando dados de um sistema PARADOX para SQL Server.

O banco no SQL Server está todo relacionado direitinho, o problema é que o Paradox não. Um dos problemas é que há campos no SQL Server que são obrigatórios (NOT NULL) e que eventualmente não foram preenchidos no Paradoex. Para evitar testar campo por campo se ele é nulo tentei fazer uma função mas não está dando certo... eis o código:

procedure TfrmPrincipal.Transfere(Origem: TField);
begin
   if origem.IsNull then
   begin
      case VarType(origem.Value) of
         varInteger : Result := 0;
         varDate    : Result := Date;
         varString  : Result := ´*´;
      end;
   end else
   begin
      Result := origem.Value;
   end;
end;


A estou usando assim:

querySQLBairro.Value := Transfere(queryPARADOXPBAIRR1);


Mas executar e receber um campo nulo ele não consegue determinar o tipo da variável e sai sem retornar nada.

Alguma idéia de como corrigir isso ou uma idéia melhor pra gerenciar o problema da importação?


Willian

Willian

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

06/08/2009

tente com esse código (note que precisa ser uma function, não uma procedure):
function TfrmPrincipal.Transfere(Origem: TField): variant;
begin
   if Origem.IsNull then
      case Origem.DataType of
         ftSmallint, ftInteger, ftWord, ftFloat,
         ftCurrency, ftBCD, ftFMTBcd, ftLargeint: Result := 0;
         ftDate, ftDateTime, ftTimeStamp        : Result := Date;
         ftTime                                 : Result := Time;
         ftString, ftFixedChar, ftWideString    : Result := ´*´;
      else
        ShowMessage(´O campo "´+Origem.FieldName+´" é do tipo ´+
          GetEnumName(TypeInfo(TFieldType), integer(Origem.DataType)) +
          ´ e não foi tratado no case.´#13´Corrija.´
        );
        Result := null;
      end
   else
      Result := origem.Value;
end;


obs.: para esse código funcionar é preciso acrescentar a unit TypInfo à sua cláusula uses.


GOSTEI 0
Mkoch

Mkoch

06/08/2009

Em vez de usar o ´VarType(origem.Value)´ tenta fazer esse teste com o tipo do campo para retornar um valor.
Se o tipo do campo é String
retorna ´´
Se o tipo do campo é Data
retorna Data
...
Resumindo:Tentar ver o tipo do campo pela sua definição e não pelo seu conteúdo.


GOSTEI 0
Willian

Willian

06/08/2009

Obrigado a todos pelas sugestões.

emerson.en,

Seu código funcionou perfeitamente... muito obrigado!!! Resolveu meu problema.


GOSTEI 0
POSTAR