SQL Server - Erro de Inserção de Chave!

Delphi

26/09/2005

Estou fazendo uma migração e estou verificando as chaves q ja tem. Caso não tenha a chave eu insiro a mesma... vou colocar uma parte do código para vcs verem...

  if chb_Programas.Checked then
  begin
    arquivo := TStringList.Create;
    txt := ´C:\Programas.txt´;
    adoProgramas.Open;
    ProgressBar1.Position := 0;
    ProgressBar1.Max:= adoProgramas.RecordCount;
    //Verificar se CD E SG são iguais
    with AdoDSTabelaDestino do
    begin
      close;
      CommandText := ´Select * From CTB_PROGRAMAS´;
      open;
    end;
    while not adoProgramas.EOF do
    begin
      if (AdoDSTabelaDestino.Locate(´CD_PROGRAMA´, inttostr(adoProgramas.FieldByName(´CD_PROGRAMA´).asInteger), [])) then
      begin
        if adoProgramas.FieldByName(´CD_PROGRAMA´).asInteger = AdoDSTabelaDestino.FieldByName(´CD_PROGRAMA´).asInteger Then
        begin
          If adoProgramas.FieldByName(´SG_PROGRAMA´).asInteger <> AdoDSTabelaDestino.FieldByName(´SG_PROGRAMA´).asInteger Then
          begin
            arquivo.Add(inttostr(adoProgramas.FieldbyName(´CD_PROGRAMA´).asInteger) + ´ - ´ + adoProgramas.FieldByName (´NM_PROGRAMA´).asString);
            adoProgramas.Next;
            AdoDSTabelaDestino.Next;
          end else
          begin
            AdoDSTabelaDestino.Edit;
            AdoDSTabelaDestino.FieldByName (´AN_PROGRAMA_CRIACAO´).AsString        := adoProgramas.FieldByName(´AN_PROGRAMA_CRIACAO´).AsString;
            AdoDSTabelaDestino.FieldByName (´AN_PROGRAMA_INATIVACAO´).AsString     := adoProgramas.FieldByName (´AN_PROGRAMA_INATIVACAO´).AsString;
            AdoDSTabelaDestino.FieldByName (´SG_PROGRAMA´).asString                 := adoProgramas.FieldByName (´SG_PROGRAMA´).asString;
            AdoDSTabelaDestino.FieldByName (´NM_PROGRAMA´).asString                 := adoProgramas.FieldByName (´NM_PROGRAMA´).asString;
            AdoDSTabelaDestino.FieldByName (´DT_PROGRAMA_CRIACAO´).AsDateTime       := adoProgramas.FieldByName (´DT_PROGRAMA_CRIACAO´).AsDateTime;
            AdoDSTabelaDestino.FieldByName (´CD_UNIDADE_ORCAMENTARIA´).AsString    := adoProgramas.FieldByName (´CD_UNIDADE_ORCAMENTARIA´).AsString;
            AdoDSTabelaDestino.FieldByName (´DS_PROGRAMA_OBJETIVO´).asString        := adoProgramas.FieldByName (´DS_PROGRAMA_OBJETIVO´).asString;
            AdoDSTabelaDestino.FieldByName (´DS_PROGRAMA_PUBLICO_ALVO´).asString    := adoProgramas.FieldByName (´DS_PROGRAMA_PUBLICO_ALVO´).asString;
            AdoDSTabelaDestino.FieldByName (´SB_PROGRAMA_TIPO´).asString            := adoProgramas.FieldByName (´SB_PROGRAMA_TIPO´).asString;
            AdoDSTabelaDestino.FieldByName (´DT_PROGRAMA_INICIO´).asDateTime        := adoProgramas.FieldByName (´DT_PROGRAMA_INICIO´).asDateTime;
            AdoDSTabelaDestino.FieldByName (´DT_PROGRAMA_FIM´).asDateTime           := adoProgramas.FieldByName (´DT_PROGRAMA_FIM´).asDateTime;
            AdoDSTabelaDestino.FieldByName (´SB_PROGRAMA_NATUREZA´).asString        := adoProgramas.FieldByName (´SB_PROGRAMA_NATUREZA´).asString;
            AdoDSTabelaDestino.FieldByName (´VL_PROGRAMA´).asFloat                  := adoProgramas.FieldByName (´VL_PROGRAMA´).asFloat;
            AdoDSTabelaDestino.FieldByName (´SN_PROGRAMA_MULTISSETORIAL´).asBoolean := adoProgramas.FieldByName (´SN_PROGRAMA_MULTISSETORIAL´).asBoolean ;
            AdoDSTabelaDestino.Post;
            adoProgramas.Next;
          end;
        end;
      end else
      begin
[b]        ADOCommand.CommandText:= ´Set Identity_Insert CTB_PROGRAMAS on´; 
        ADOCommand.Execute;[/b]        ShortDateFormat := ´yyyy/mm/dd´;
        Nome:= Copy(adoProgramas.FieldByName(´NM_PROGRAMA´).AsString,1,60);
        if Pos(´´´´,Nome) > 0 then
           Nome[Pos(´´´´,Nome)]:= ´´´;

        ADOCommand.CommandText:= ´Insert into CTB_Programas(CD_PROGRAMA, AN_PROGRAMA_CRIACAO, AN_PROGRAMA_INATIVACAO, SG_PROGRAMA,                      ´+
                                 ´NM_PROGRAMA, DT_PROGRAMA_CRIACAO, CD_UNIDADE_ORCAMENTARIA, DS_PROGRAMA_OBJETIVO, DS_PROGRAMA_PUBLICO_ALVO,            ´+
                                 ´SB_PROGRAMA_TIPO, DT_PROGRAMA_INICIO, DT_PROGRAMA_FIM, SB_PROGRAMA_NATUREZA, VL_PROGRAMA, SN_PROGRAMA_MULTISSETORIAL) ´+
                                 ´Values (´´´+adoProgramas.FieldByName(´CD_PROGRAMA´).AsString         + ´´´, ´´´ +
                                 adoProgramas.FieldByName(´AN_PROGRAMA_CRIACAO´).AsString         + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´AN_PROGRAMA_INATIVACAO´).asString)                + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´SG_PROGRAMA´).asString)                          + ´´´, ´´´ +
                                 Nome                                                                        + ´´´, ´´´ +
                                 datetostr(adoProgramas.FieldByName(´DT_PROGRAMA_CRIACAO´).AsDateTime)       + ´´´, ´´´ +
                                 adoProgramas.FieldByName(´CD_UNIDADE_ORCAMENTARIA´).asString                + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´DS_PROGRAMA_OBJETIVO´).asString)                 + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´DS_PROGRAMA_PUBLICO_ALVO´).asString)             + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´SB_PROGRAMA_TIPO´).asString)                     + ´´´, ´´´ +
                                 DateToStr(adoProgramas.FieldByName(´DT_PROGRAMA_INICIO´).AsDateTime)    + ´´´, ´´´ +
                                 DateToStr(adoProgramas.FieldByName(´DT_PROGRAMA_FIM´).AsDateTime)       + ´´´, ´´´ +
                                 (adoProgramas.FieldByName(´SB_PROGRAMA_NATUREZA´).asString)                 + ´´´, ´´´ +
                                 floattostr(adoProgramas.FieldByName(´VL_PROGRAMA´).asFloat)                 + ´´´, ´´´;
                                 if adoProgramas.FieldByName(´SN_PROGRAMA_MULTISSETORIAL´).AsBoolean = false then
                                 bValue:= ´0´ else bValue := ´1´;
                                 ADOCommand.CommandText := ADOCommand.CommandText + bValue + ´´´)´;

        [b]ADOCommand.Execute;[/b] //aqui da o erro!
        ProgressBar1.Position:= ProgressBar1.Position + 1;
        adoProgramas.Next;
      end;
    end;
    ADOCommand.CommandText:= ´Set Identity_Insert CTB_PROGRAMAS off´;
    ADOCommand.Execute;
    arquivo.SaveToFile(txt);
  end;




Verifique q eu seto o Identify_Insert da tabela pra ON antes de dar um insert na tabela;
ADOCommand.CommandText:= ´Set Identity_Insert CTB_PROGRAMAS on´; ADOCommand.Execute;


Está dando o seguinte erro:
´Cannot Insert explicit value for identify column in table ´CTB_PROGRAMAS´ when IDENTIFY_INSERT is set to OFF. ´

[b:7f75d3fa82]O QUE EU ESTOU FAZENDO DE ERRADO!?!?!?!?!?!?!?!?!?![/b:7f75d3fa82]

DESDE JÁ AGRADEÇO!!!!

Diego


Diegus

Diegus

Curtidas 0
POSTAR