Fórum Cannot modify a ReadOnly dataset. #349187
19/11/2007
0
Ola a todos,
Probleminha simples, mas nao estou conseguindo resolver:
Quando rodo o codigo abaixo, acontece o erro ´Cannot modify a readonly dataset.´ A propriedade Readonly esta para false.
Mais precisamente, no primeiro loop. quando vai rodar ele na 19 vez, mais ou menos.
E agora? O que esta errado?
Grato!
Probleminha simples, mas nao estou conseguindo resolver:
Quando rodo o codigo abaixo, acontece o erro ´Cannot modify a readonly dataset.´ A propriedade Readonly esta para false.
procedure AbreTabela(var tabela:TpFiBDataset;NomeTabela:string); begin tabela.Close; tabela.SQLs.SelectSQL.Clear; tabela.SQLs.SelectSQL.add(´SELECT * FROM ´ + NomeTabela); MensagemLOG:=´Nome da tabela: ´+NomeTabela; FPrincipal.GeraLOG(MensagemLOG); tabela.Open; end; procedure TFPrincipal.Migrar(); var i,j:integer; TabelaAntiga:string; arTabelas:array of string; TamArray:integer; begin ClientDataSet.Edit; ClientDataSet.Active; with FPrincipal.DataBaseBDANTIGO, ConnectParams do begin DBName := ´localhost:´+CaminhoBDANTIGO; UserName := ´SYSDBA´; ConnectParams.Password := ´masterkey´; SQLDialect := 3; try Open; except on E: Exception do begin MessageDlg(´Impossivel conectar com Banco antigo.´#13 + E.Message, mtError, [mbOk], 0); MensagemLOG:=´impossivel conectar com banco antigo.´; GeraLOG(MensagemLOG); end; end; end; with FPrincipal.DataBaseBDNOVO, ConnectParams do begin DBName := ´localhost:´+CaminhoBDNOVO; ConnectParams.UserName := ´SYSDBA´; Password := ´masterkey´; SQLDialect := 3; try Open; except on E: Exception do begin MessageDlg(´Impossivel conectar com Banco NOVO.´13 + E.Message, mtError, [mbOk], 0); MensagemLOG:=´impossivel conectar com banco NOVO.´; GeraLOG(MensagemLOG); end; end; FPrincipal.ClientDataSet.First; ClientDataSet.Active := True; ClientDataSet.Open; if ClientDataSet.Active then begin MensagemLOG:=´ClientDataSet Aberto.´; GeraLOG(MensagemLOG); end; for i := 0 to FPrincipal.ClientDataSet.RecordCount - 1 do begin //Se for diferente, abro a tabela if TabelaAntiga <> FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString then begin TamArray:=Length(arTabelas) + 1; setLength(arTabelas,TamArray); //Aumento o tamanho do array arTabelas[TamArray-1]:=FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString; end; TabelaAntiga:=FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString; FPrincipal.ClientDataSet.Next; end; FPrincipal.ClientDataSet.First; TabelaAntiga:=FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString; for I := 0 to LengTh(arTabelas) - 1 do begin AbreTabela(FPrincipal.DataSetBDANTIGO,arTabelas[I]);//Tabela antiga FPrincipal.ClientDataSet.Locate(´TB_ANTIGO´,arTabelas[I],[]);//Posiciona o ponteiro na tabela de dicionario AbreTabela(FPrincipal.DataSetBDNOVO,FPrincipal.ClientDataSet.FieldByName(´TB_NOVO´).AsString); while not FPrincipal.DataSetBDANTIGO.EOF do begin FPrincipal.DataSetBDNOVO.Insert; for j := 0 to FPrincipal.DataSetBDANTIGO.FieldCount - 1 do begin FPrincipal.ClientDataSet.Locate(´TB_ANTIGO,CA_ANTIGO´,VarArrayOf([FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString,FPrincipal.ClientDataSet.FieldByName(´CA_ANTIGO´).AsString]),[]); FPrincipal.DataSetBDNOVO.FieldByName(FPrincipal.ClientDataSet.FieldByName(´TB_NOVO´).AsString).AsString:=FPrincipal.DataSetBDANTIGO.FieldByName(FPrincipal.ClientDataSet.FieldByName(´TB_ANTIGO´).AsString).AsString; end; DataSetBDNOVO.Insert; FPrincipal.DataSetBDNOVO.Post; FPrincipal.DataSetBDANTIGO.Next; end; end; end;
Mais precisamente, no primeiro loop. quando vai rodar ele na 19 vez, mais ou menos.
E agora? O que esta errado?
Grato!
Sergiofigueras
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)