runTime中FIREDAC select语句中的最大字段数

时间:2015-03-24 14:22:39

标签: delphi firedac bde

我将我的应用程序从BDE迁移到FIREDac 我用来更新数据库的例程不起作用:

SELECT 
  CODIGO , NOME , ENDERECO , ENDERECO1 , COMPLEMENTO , COMPLEMENTO1 ,
  PONTOREFERENCIA , BAIRRO , CIDADE , UF , PAIS , CEP , CX_POSTAL ,
  FONE , FAX , EMAIL , CONTATO , CGC , INSCRICAO , DATA_FICHA , CI ,
  CPF , TIT_ELEITOR , DATA_NASC , SEXO , EST_CIVIL , NATURAL , FILIACAO ,
  PAI , MAE , CONJUGE , NASC_CONJ , ALUGUEL , VAL_ALUGUEL , TEMP_RESID ,
  EMPRESA , FONE_EMPR , ADMISSAO , CEP_EMPR , CIDA_EMPR , UF_EMPR ,
  FUNCAO , TEMP_SERV , REF_COML , REF_BANC , CONS_SPC , OBS , CREDITO ,
  ATRASO , SALARIO , ENDEMPRESA , FOTO , NOMEFANTASIA , CREDITOS ,
  ENDCOBRANCA , RESTRICAO , BAIRRO_EMPR , INATIVO , CONTATO1 , CONTATO2 ,
  CONTATO3 , TAXABOLETO , RESTRICAOANTIGA , NUMERO , IDCIDADE ,
  IDPAISES , CUF
FROM
  Clientes

它给我一个内部错误。

有些亮点??!

注意:在Time designer中,将直接命令放在FdQuery中并且它正常工作!bs:在设计器Time中,在FdQuery中输入直接命令和

注2:BD在Access !!!

当我试图解释时,我会选择数据并插入无目标表! abiaxo例程适用于具有少量字段的表。但是在上面有错误的情况下!

选择仅用于演示发生错误的表格! 代码:

procedure ConverteTabela(Query: TFDQuery; Alias, Tabela, Campo: string; Tipo: Integer; Senha: string);
var
  Tabela1: TFDTable;
  I: Integer;
  STR:String;
begin
// Tipo = 0 -> Todos os registros da tabela antiga
// Tipo = 1 -> Todos os registros da tabela antiga que não estão na tabela de atualização
// Tipo = 2 -> Todos os registros da tabela antiga que possuem Campo <> 0
// Tipo = 3 -> Apaga os registro da tabela de atualização e coloca os da empresa



  Tabela1 := TFDTable.Create(Application);
  Tabela1.ConnectionName := Query.ConnectionName;
  Tabela1.TableName := Tabela;

  Str:='';

  try
    Tabela1.open;
      for I := 0 to tabela1.Fields.Count-1 do
    begin
    if not (i=tabela1.Fields.Count-1) then
      begin
       Str:= Str + UpperCase(tabela1.Fields[i].FieldName)+ ' , '

      end
    else
       Str:= Str + tabela1.Fields[i].FieldName;
    end;

    Tabela1.Close;
    Tabela1.free;
  except
    exit;
  end;

  Mensagem('Convertendo : ' + Tabela + ' ...');

  if Tipo = 3 then
  begin
    Query.SQL.Clear;
    Query.SQL.Add('DELETE FROM "'+ Alias + '".'+Tabela);
    Query.ExecSQL;
    Tipo := 0;
  end;

  //test Select -
  Query.SQL.Clear;
  Query.SQL.Text := 'Select ' + str + 'from '+Tabela;
  Query.open;

  Query.SQL.Clear;
  Query.SQL.Text:='INSERT INTO "'+ Alias + '".'+tabela+' ('+str+')'+    '  SELECT '+str+' FROM ' + Tabela;

  if (Tipo = 1) then
  begin
    Query.SQL.Add('WHERE ' + Campo + ' NOT IN');
    Query.SQL.Add('(SELECT ' + Campo + ' FROM  "'+ Alias + '".'+tabela+')');
  end
  else if (Tipo = 2) then
  begin
    Query.SQL.Add('WHERE ' + Campo + ' <> 0');
    Query.SQL.Add('AND ' + Campo + ' <> -1');
  end;

 // Query.Prepare;
  try
    Query.ExecSQL;
  except
    showmessage('Erro ao executar comando : ' + Query.Sql.CommaText);
    exit;
  end;
end;

0 个答案:

没有答案