Fórum SQL Server - Erro de Inserção de Chave! #297015
26/09/2005
0
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...
Verifique q eu seto o Identify_Insert da tabela pra ON antes de dar um insert na tabela;
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
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)