Delphi 运行时FIREDAC select语句中的最大字段数

Delphi 运行时FIREDAC select语句中的最大字段数,delphi,firedac,bde,Delphi,Firedac,Bde,我将我的应用程序从BDE迁移到FIREDac。 用于更新数据库的例程不起作用: 选择 CODIGO,NOME,ENDERECO,ENDERECO 1,COMPLEMENTO,COMPLEMENTO 1, PONTOREFERENCIA、BAIRRO、CIDADE、UF、PAIS、CEP、CX_邮政、, FONE、传真、电子邮件、CONTATO、CGC、INSCRICAO、DATA_FICHA、CI、, CPF、TIT_ELEITOR、DATA_NASC、SEXO、EST_CIVIL、NATURA

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

选择
CODIGO,NOME,ENDERECO,ENDERECO 1,COMPLEMENTO,COMPLEMENTO 1,
PONTOREFERENCIA、BAIRRO、CIDADE、UF、PAIS、CEP、CX_邮政、,
FONE、传真、电子邮件、CONTATO、CGC、INSCRICAO、DATA_FICHA、CI、,
CPF、TIT_ELEITOR、DATA_NASC、SEXO、EST_CIVIL、NATURAL、FILIACAO、,
PAI,MAE,Magage,NASC_CONJ,ALUGUEL,VAL_ALUGUEL,TEMP_RESID,
EMPRESA、FONE_EMPR、EMPSAO、CEP_EMPR、CIDA_EMPR、UF_EMPR、,
FUNCAO、临时服务、参考公司、参考银行、CONS\u SPC、OBS、CREDITO、,
ATRASO、SALARIO、ENDEMPRESA、FOTO、NOMEFANTASIA、CREDITOS、,
ENDCOBRANCA、Restrico、BAIRRO_EMPR、INATIVO、CONTATO1、CONTATO2、,
CONTATO3、TAXABOLETO、RESTRICOANTIGA、NUMERO、IDCIDADE、,
IDPAISES,CUF
从…起
客户
它给了我一个内部错误

一些光

注意:在时间设计器中,将direct命令放入FdQuery,它将正常工作!bs:在设计时,在FdQuery和

注2:BD处于访问状态

正如我试图解释的那样,我会选择数据并且不插入目标表!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;
procedure-ConverteTabela(查询:TFDQuery;别名,Tabela,Campo:string;Tipo:Integer;Senha:string);
变量
表1:TFDTable;
I:整数;
STR:字符串;
开始
//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(应用程序);
Tabela1.ConnectionName:=Query.ConnectionName;
Tabela1.TableName:=Tabela;
Str:='';
尝试
Tabela1.open;
对于I:=0到tabela1.Fields.Count-1 do
开始
如果不是(i=tabela1.Fields.Count-1),则
开始
Str:=Str+大写(tabela1.Fields[i].FieldName)+','
结束
其他的
Str:=Str+tabela1.Fields[i].FieldName;
结束;
表1.关闭;
Tabela1.free;
除了
出口
结束;
mensage('Convertendo:'+Tabela+'…');
如果Tipo=3,则
开始
Query.SQL.Clear;
Query.SQL.Add('DELETE FROM“+Alias+””+Tabela);
Query.ExecSQL;
Tipo:=0;
结束;
//测试选择-
Query.SQL.Clear;
Query.SQL.Text:=“从“+Tabela”中选择“+str+”;
Query.open;
Query.SQL.Clear;
Query.SQL.Text:='INSERT-INTO“++别名+”“+tabela+”(“+str+”)“+”从“+tabela”中选择“+str+”;
如果(Tipo=1),则
开始
Add('WHERE'+Campo+'notin');
Add('(从“+Alias+”、“+tabela+”)中选择“+Campo+”);
结束
否则,如果(Tipo=2),则
开始
Add('WHERE'+Campo+'0');
Add('AND'+Campo+'-1');
结束;
//查询、准备;
尝试
Query.ExecSQL;
除了
showmessage('Erro ao executar comando:'+Query.Sql.CommaText);
出口
结束;
结束;

重新设计您的模式,您会没事的。但无论如何,我不认为FireDAC会限制67列(!!!)。我想问题是另外一回事。但是,如果没有(至少)对错误的详细描述,我们就无能为力了。我想这是由字段名称<代码>函数< /COD>或<代码>自然<代码>引起的。在第二次查看之后,我会说“代码>邮政编码< /代码>导致问题,因为字段名称中的空白,这个原始选择是这样的,谷歌翻译改变我的选择你的问题没有更新,只有选择。也没有显示如何使用此选择(或更新)的Delphi代码。你认为我们能帮什么忙?