GRAVAR NAS TABELAS USANDO DBEXPRESS
COMO FAÇO PARA GRAVAR NO BANCO DE DADOS USANDO OS COMPONENTES DBEXEPRESS? JA QUE TODOS OS COMPONENTES SÃO READ ONLY?
Valdelir Castanheiro
Curtidas 0
Respostas
Rafael Mattos
24/05/2011
não entendi o que vc quis dizer....
como assim todos os componentes são READ-ONLY??
como assim todos os componentes são READ-ONLY??
GOSTEI 0
Valdelir Castanheiro
24/05/2011
não entendi o que vc quis dizer....
como assim todos os componentes são READ-ONLY??
como assim todos os componentes são READ-ONLY??
todos os componentes são read only certo? então como é que eu faço para gravar nas tabelas do banco usando o dbexpress?
GOSTEI 0
Rafael Mattos
24/05/2011
não entendi o que vc quis dizer....
como assim todos os componentes são READ-ONLY??
como assim todos os componentes são READ-ONLY??
todos os componentes são read only certo? então como é que eu faço para gravar nas tabelas do banco usando o dbexpress?
não os componentes não são read only
ClientDataSet.edit; // EDIT
ClientDataSet.Insert; // INSERE
ClientDataSet.Post; // GRAVA NO CACHE
ClientDataSet.Delete; // DELETE
ClientDataSet.ApplyUpdates(0); // APLICA O QUE ESTÁ NO CACHE NO BANCO DE DADOS
Se vc quer inserir no botão Inserir coloque
ClientDataSet.Insert; // INSERE
depois no botão gravar
ClientDataSet.Post; // GRAVA NO CACHE
ClientDataSet.ApplyUpdates(0); // APLICA O QUE ESTÁ NO CACHE NO BANCO DE DADOS
GOSTEI 0
Valdelir Castanheiro
24/05/2011
ja tentei usar todos estes exmplos e diz que a tabela não pode ser modificado, usei o edit, insert, append e não consegui gravar
GOSTEI 0
Leandro Santos
24/05/2011
Qual Banco de dados vc está usando?
Não é o seu banco de dados que está em modo somente de leitura.
Não é o seu banco de dados que está em modo somente de leitura.
GOSTEI 0
Valdelir Castanheiro
24/05/2011
Estou usando o Firebird, no banco não tem nenhuma restrição de gravção
GOSTEI 0
Marco Salles
24/05/2011
Vc consegue se comunicar com o Banco ..
Parece que seu problema é Gravar no Banco
Vc tem que commitar estas alterações ( Vc deve estar utilizando um clientDataSet suponho)
Então vc tem que fazer as alterações e no fim dar um ApplayUpdates(0) para que os dados possam
trafegar para o servidor
Pode ser que vc tenha erro. Este erro é silencioso e vc pode ver no evento OnEconcilleError do ClientDataSet
Enfim , faças as devidas alterações/inserções/ediçoes e de um ApplayUpdates(0) e programa o evento
OnReconcilleError e passe mais detalhes
Parece que seu problema é Gravar no Banco
Vc tem que commitar estas alterações ( Vc deve estar utilizando um clientDataSet suponho)
Então vc tem que fazer as alterações e no fim dar um ApplayUpdates(0) para que os dados possam
trafegar para o servidor
Pode ser que vc tenha erro. Este erro é silencioso e vc pode ver no evento OnEconcilleError do ClientDataSet
Enfim , faças as devidas alterações/inserções/ediçoes e de um ApplayUpdates(0) e programa o evento
OnReconcilleError e passe mais detalhes
GOSTEI 0
Valdelir Castanheiro
24/05/2011
Acontece que o erro acontece quando eu edito a tabela para inserir os dados e não na hora de gravar
GOSTEI 0
Rafael Mattos
24/05/2011
Acontece que o erro acontece quando eu edito a tabela para inserir os dados e não na hora de gravar
posta o codigo da Edição e da Gravação
GOSTEI 0
Emerson Nascimento
24/05/2011
você deve estar usando somente os componentes dbExpress. eles realmente são somente leitura (unidirecionais).
para fazer a manutenção dos registros contidos nesses objetos você precisará ligá-los a um ClientDataset através de um DataseProvider. E para exibir os dados você precisará ligar um Datasource ao ClientDataset para poder ligá-lo ao seus componentes Dataware.
o ClientDataset é bidirecional (leitura e escrita) e sem ele você não conseguirá manipular seus registros.
então sua ligação deve ser assim:
SQLConnection <- SQLDataset <- DatasetProvider <- ClientDataset <- Datasource <- Componente Dataware (dbGrid, dbEdit, etc)
pesquise aqui no fórum e na internet a respeito. há vários artigos explicando como trabalhar com dbExpress.
para fazer a manutenção dos registros contidos nesses objetos você precisará ligá-los a um ClientDataset através de um DataseProvider. E para exibir os dados você precisará ligar um Datasource ao ClientDataset para poder ligá-lo ao seus componentes Dataware.
o ClientDataset é bidirecional (leitura e escrita) e sem ele você não conseguirá manipular seus registros.
então sua ligação deve ser assim:
SQLConnection <- SQLDataset <- DatasetProvider <- ClientDataset <- Datasource <- Componente Dataware (dbGrid, dbEdit, etc)
pesquise aqui no fórum e na internet a respeito. há vários artigos explicando como trabalhar com dbExpress.
GOSTEI 0
Valdelir Castanheiro
24/05/2011
ESTOU ENVIANDO O CODIGO, FIZ COMO VC SUGERIU MAS NA HORA DE EDITAR A SQLDATASET1 DA A MENSAGEM DIZENDO QUE NÃO PODE SER MODIFICADA
while not ClientDataSet1.Eof do
Begin
Inc(Conta);
Gauge1.Progress:=Conta;
Prefixo:=ClientDataSet1CODIGOLINHA.Value;
CatracaInicial:=BcdToInteger(ClientDataSet1CATRACAINICIAL.Value);
CatracaFinal:=BcdToInteger(ClientDataSet1CATRACAFINAL.Value);
DataInicio:=DateToStr(ClientDataSet1DATAINICIO.AsDateTime);
SQLDataSet1.Close;
SQLDataSet1.ParamByName('PREFIXO').Value:=Prefixo;
SQLDataSet1.ParamByName('CATRACAINCIAL').Value:=CatracaInicial;
SQLDataSet1.ParamByName('CATRACAFINAL').Value:=CatracaFinal;
SQLDataSet1.ParamByName('DATAINICIO').AsDate:=StrToDate(DataInicio);
SQLDataSet1.Open;
if SQLDataSet1.Eof and SQLDataSet1.Bof then
Begin
SQLDataSet1.Edit;
SQLDataSet1PREFIXO.Value:=SQLQuery1CODIGOLINHA.Value;
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAINICIAL.Value);
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAFINAL.Value);
SQLDataSet1DATAINICIO.Value:=SQLQuery1DATAINICIO.AsDateTime;
SQLDataSet1DATAFIM.Value:=SQLQuery1DATAFIM.AsDateTime;
SQLDataSet1MATRICULACOBRADOR.Value:=StrToInt(SQLQuery1MATRICULA.Value);
SQLDataSet1NOMECOBRADO.Value:=SQLQuery1COBRADOR.Value;
SQLDataSet1VEICULO.Value:=StrToInt(SQLQuery1VEICULO.Value);
SQLDataSet1SEQSECAO.Value:=BcdToInteger(SQLQuery1SEQUENCIASESSAO.Value);
SQLDataSet1PAGANTES.Value:=BcdToInteger(SQLQuery1PAGANTES.Value);
SQLDataSet1VPAGANTES.Value:=SQLQuery1VPAGANTES.Value;
SQLDataSet1QTDUSUARIOS.Value:=BcdToInteger(SQLQuery1QTD_USUARIOS.Value);
SQLDataSet1VUSUARIOS.Value:=SQLQuery1VALOR_USUARIOS.Value;
SQLDataSet1QTDESTUDANTES.Value:=BcdToInteger(SQLQuery1QTD_ESTUDANTES.Value);
SQLDataSet1VESTUDANTES.Value:=SQLQuery1VALOR_ESTUDANTES.Value;
SQLDataSet1QTDISENTOS.Value:=BcdToInteger(SQLQuery1QTD_ISENTOS.Value);
SQLDataSet1VISENTOS.Value:=SQLQuery1VALOR_ISENTOS.Value;
SQLDataSet1QTDVALETRANSPORTE.Value:=BcdToInteger(SQLQuery1QTD_VALETRANSPORTE.Value);
SQLDataSet1VVALETRANSPORTE.Value:=SQLQuery1VALOR_VALETRANSPORTE.Value;
SQLDataSet1QTDINTEGRACAO.Value:=BcdToInteger(SQLQuery1QTD_INTEGRACOES.Value);
SQLDataSet1VINTEGRACAO.Value:=SQLQuery1VALOR_INTEGRACOES.Value;
SQLDataSet1QTDOUTROS.Value:=BcdToInteger(SQLQuery1QTD_OUTROSSISTEMAS.Value);
SQLDataSet1VOUTROS.Value:=SQLQuery1VALOR_OUTROSSISTEMAS.Value;
SQLDataSet1QTDTOTAL.Value:=BcdToInteger(SQLQuery1QTD_TOTAL.Value);
SQLDataSet1VTOTAL.Value:=SQLQuery1VALOR_TOTAL.Value;
SQLDataSet1NRFORMULARIO.Value:=0;
SQLDataSet1.Post;
end;
ClientDataSet1.Next;
end;
while not ClientDataSet1.Eof do
Begin
Inc(Conta);
Gauge1.Progress:=Conta;
Prefixo:=ClientDataSet1CODIGOLINHA.Value;
CatracaInicial:=BcdToInteger(ClientDataSet1CATRACAINICIAL.Value);
CatracaFinal:=BcdToInteger(ClientDataSet1CATRACAFINAL.Value);
DataInicio:=DateToStr(ClientDataSet1DATAINICIO.AsDateTime);
SQLDataSet1.Close;
SQLDataSet1.ParamByName('PREFIXO').Value:=Prefixo;
SQLDataSet1.ParamByName('CATRACAINCIAL').Value:=CatracaInicial;
SQLDataSet1.ParamByName('CATRACAFINAL').Value:=CatracaFinal;
SQLDataSet1.ParamByName('DATAINICIO').AsDate:=StrToDate(DataInicio);
SQLDataSet1.Open;
if SQLDataSet1.Eof and SQLDataSet1.Bof then
Begin
SQLDataSet1.Edit;
SQLDataSet1PREFIXO.Value:=SQLQuery1CODIGOLINHA.Value;
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAINICIAL.Value);
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAFINAL.Value);
SQLDataSet1DATAINICIO.Value:=SQLQuery1DATAINICIO.AsDateTime;
SQLDataSet1DATAFIM.Value:=SQLQuery1DATAFIM.AsDateTime;
SQLDataSet1MATRICULACOBRADOR.Value:=StrToInt(SQLQuery1MATRICULA.Value);
SQLDataSet1NOMECOBRADO.Value:=SQLQuery1COBRADOR.Value;
SQLDataSet1VEICULO.Value:=StrToInt(SQLQuery1VEICULO.Value);
SQLDataSet1SEQSECAO.Value:=BcdToInteger(SQLQuery1SEQUENCIASESSAO.Value);
SQLDataSet1PAGANTES.Value:=BcdToInteger(SQLQuery1PAGANTES.Value);
SQLDataSet1VPAGANTES.Value:=SQLQuery1VPAGANTES.Value;
SQLDataSet1QTDUSUARIOS.Value:=BcdToInteger(SQLQuery1QTD_USUARIOS.Value);
SQLDataSet1VUSUARIOS.Value:=SQLQuery1VALOR_USUARIOS.Value;
SQLDataSet1QTDESTUDANTES.Value:=BcdToInteger(SQLQuery1QTD_ESTUDANTES.Value);
SQLDataSet1VESTUDANTES.Value:=SQLQuery1VALOR_ESTUDANTES.Value;
SQLDataSet1QTDISENTOS.Value:=BcdToInteger(SQLQuery1QTD_ISENTOS.Value);
SQLDataSet1VISENTOS.Value:=SQLQuery1VALOR_ISENTOS.Value;
SQLDataSet1QTDVALETRANSPORTE.Value:=BcdToInteger(SQLQuery1QTD_VALETRANSPORTE.Value);
SQLDataSet1VVALETRANSPORTE.Value:=SQLQuery1VALOR_VALETRANSPORTE.Value;
SQLDataSet1QTDINTEGRACAO.Value:=BcdToInteger(SQLQuery1QTD_INTEGRACOES.Value);
SQLDataSet1VINTEGRACAO.Value:=SQLQuery1VALOR_INTEGRACOES.Value;
SQLDataSet1QTDOUTROS.Value:=BcdToInteger(SQLQuery1QTD_OUTROSSISTEMAS.Value);
SQLDataSet1VOUTROS.Value:=SQLQuery1VALOR_OUTROSSISTEMAS.Value;
SQLDataSet1QTDTOTAL.Value:=BcdToInteger(SQLQuery1QTD_TOTAL.Value);
SQLDataSet1VTOTAL.Value:=SQLQuery1VALOR_TOTAL.Value;
SQLDataSet1NRFORMULARIO.Value:=0;
SQLDataSet1.Post;
end;
ClientDataSet1.Next;
end;
GOSTEI 0
Rafael Mattos
24/05/2011
ESTOU ENVIANDO O CODIGO, FIZ COMO VC SUGERIU MAS NA HORA DE EDITAR A SQLDATASET1 DA A MENSAGEM DIZENDO QUE NÃO PODE SER MODIFICADA
while not ClientDataSet1.Eof do
Begin
Inc(Conta);
Gauge1.Progress:=Conta;
Prefixo:=ClientDataSet1CODIGOLINHA.Value;
CatracaInicial:=BcdToInteger(ClientDataSet1CATRACAINICIAL.Value);
CatracaFinal:=BcdToInteger(ClientDataSet1CATRACAFINAL.Value);
DataInicio:=DateToStr(ClientDataSet1DATAINICIO.AsDateTime);
SQLDataSet1.Close;
SQLDataSet1.ParamByName('PREFIXO').Value:=Prefixo;
SQLDataSet1.ParamByName('CATRACAINCIAL').Value:=CatracaInicial;
SQLDataSet1.ParamByName('CATRACAFINAL').Value:=CatracaFinal;
SQLDataSet1.ParamByName('DATAINICIO').AsDate:=StrToDate(DataInicio);
SQLDataSet1.Open;
if SQLDataSet1.Eof and SQLDataSet1.Bof then
Begin
SQLDataSet1.Edit;
SQLDataSet1PREFIXO.Value:=SQLQuery1CODIGOLINHA.Value;
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAINICIAL.Value);
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAFINAL.Value);
SQLDataSet1DATAINICIO.Value:=SQLQuery1DATAINICIO.AsDateTime;
SQLDataSet1DATAFIM.Value:=SQLQuery1DATAFIM.AsDateTime;
SQLDataSet1MATRICULACOBRADOR.Value:=StrToInt(SQLQuery1MATRICULA.Value);
SQLDataSet1NOMECOBRADO.Value:=SQLQuery1COBRADOR.Value;
SQLDataSet1VEICULO.Value:=StrToInt(SQLQuery1VEICULO.Value);
SQLDataSet1SEQSECAO.Value:=BcdToInteger(SQLQuery1SEQUENCIASESSAO.Value);
SQLDataSet1PAGANTES.Value:=BcdToInteger(SQLQuery1PAGANTES.Value);
SQLDataSet1VPAGANTES.Value:=SQLQuery1VPAGANTES.Value;
SQLDataSet1QTDUSUARIOS.Value:=BcdToInteger(SQLQuery1QTD_USUARIOS.Value);
SQLDataSet1VUSUARIOS.Value:=SQLQuery1VALOR_USUARIOS.Value;
SQLDataSet1QTDESTUDANTES.Value:=BcdToInteger(SQLQuery1QTD_ESTUDANTES.Value);
SQLDataSet1VESTUDANTES.Value:=SQLQuery1VALOR_ESTUDANTES.Value;
SQLDataSet1QTDISENTOS.Value:=BcdToInteger(SQLQuery1QTD_ISENTOS.Value);
SQLDataSet1VISENTOS.Value:=SQLQuery1VALOR_ISENTOS.Value;
SQLDataSet1QTDVALETRANSPORTE.Value:=BcdToInteger(SQLQuery1QTD_VALETRANSPORTE.Value);
SQLDataSet1VVALETRANSPORTE.Value:=SQLQuery1VALOR_VALETRANSPORTE.Value;
SQLDataSet1QTDINTEGRACAO.Value:=BcdToInteger(SQLQuery1QTD_INTEGRACOES.Value);
SQLDataSet1VINTEGRACAO.Value:=SQLQuery1VALOR_INTEGRACOES.Value;
SQLDataSet1QTDOUTROS.Value:=BcdToInteger(SQLQuery1QTD_OUTROSSISTEMAS.Value);
SQLDataSet1VOUTROS.Value:=SQLQuery1VALOR_OUTROSSISTEMAS.Value;
SQLDataSet1QTDTOTAL.Value:=BcdToInteger(SQLQuery1QTD_TOTAL.Value);
SQLDataSet1VTOTAL.Value:=SQLQuery1VALOR_TOTAL.Value;
SQLDataSet1NRFORMULARIO.Value:=0;
SQLDataSet1.Post;
end;
ClientDataSet1.Next;
end;
while not ClientDataSet1.Eof do
Begin
Inc(Conta);
Gauge1.Progress:=Conta;
Prefixo:=ClientDataSet1CODIGOLINHA.Value;
CatracaInicial:=BcdToInteger(ClientDataSet1CATRACAINICIAL.Value);
CatracaFinal:=BcdToInteger(ClientDataSet1CATRACAFINAL.Value);
DataInicio:=DateToStr(ClientDataSet1DATAINICIO.AsDateTime);
SQLDataSet1.Close;
SQLDataSet1.ParamByName('PREFIXO').Value:=Prefixo;
SQLDataSet1.ParamByName('CATRACAINCIAL').Value:=CatracaInicial;
SQLDataSet1.ParamByName('CATRACAFINAL').Value:=CatracaFinal;
SQLDataSet1.ParamByName('DATAINICIO').AsDate:=StrToDate(DataInicio);
SQLDataSet1.Open;
if SQLDataSet1.Eof and SQLDataSet1.Bof then
Begin
SQLDataSet1.Edit;
SQLDataSet1PREFIXO.Value:=SQLQuery1CODIGOLINHA.Value;
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAINICIAL.Value);
SQLDataSet1CATRACAINICIAL.Value:=BcdToInteger(SQLQuery1CATRACAFINAL.Value);
SQLDataSet1DATAINICIO.Value:=SQLQuery1DATAINICIO.AsDateTime;
SQLDataSet1DATAFIM.Value:=SQLQuery1DATAFIM.AsDateTime;
SQLDataSet1MATRICULACOBRADOR.Value:=StrToInt(SQLQuery1MATRICULA.Value);
SQLDataSet1NOMECOBRADO.Value:=SQLQuery1COBRADOR.Value;
SQLDataSet1VEICULO.Value:=StrToInt(SQLQuery1VEICULO.Value);
SQLDataSet1SEQSECAO.Value:=BcdToInteger(SQLQuery1SEQUENCIASESSAO.Value);
SQLDataSet1PAGANTES.Value:=BcdToInteger(SQLQuery1PAGANTES.Value);
SQLDataSet1VPAGANTES.Value:=SQLQuery1VPAGANTES.Value;
SQLDataSet1QTDUSUARIOS.Value:=BcdToInteger(SQLQuery1QTD_USUARIOS.Value);
SQLDataSet1VUSUARIOS.Value:=SQLQuery1VALOR_USUARIOS.Value;
SQLDataSet1QTDESTUDANTES.Value:=BcdToInteger(SQLQuery1QTD_ESTUDANTES.Value);
SQLDataSet1VESTUDANTES.Value:=SQLQuery1VALOR_ESTUDANTES.Value;
SQLDataSet1QTDISENTOS.Value:=BcdToInteger(SQLQuery1QTD_ISENTOS.Value);
SQLDataSet1VISENTOS.Value:=SQLQuery1VALOR_ISENTOS.Value;
SQLDataSet1QTDVALETRANSPORTE.Value:=BcdToInteger(SQLQuery1QTD_VALETRANSPORTE.Value);
SQLDataSet1VVALETRANSPORTE.Value:=SQLQuery1VALOR_VALETRANSPORTE.Value;
SQLDataSet1QTDINTEGRACAO.Value:=BcdToInteger(SQLQuery1QTD_INTEGRACOES.Value);
SQLDataSet1VINTEGRACAO.Value:=SQLQuery1VALOR_INTEGRACOES.Value;
SQLDataSet1QTDOUTROS.Value:=BcdToInteger(SQLQuery1QTD_OUTROSSISTEMAS.Value);
SQLDataSet1VOUTROS.Value:=SQLQuery1VALOR_OUTROSSISTEMAS.Value;
SQLDataSet1QTDTOTAL.Value:=BcdToInteger(SQLQuery1QTD_TOTAL.Value);
SQLDataSet1VTOTAL.Value:=SQLQuery1VALOR_TOTAL.Value;
SQLDataSet1NRFORMULARIO.Value:=0;
SQLDataSet1.Post;
end;
ClientDataSet1.Next;
end;
vc tem que fazer igual o Emerson falou usar os Trio
GOSTEI 0
Emerson Nascimento
24/05/2011
não manipule o SQLDataset.
você DEVE o manipular o CLIENTDATASET. é ele que deve ser editado, deletado, gravado, commitado....
você DEVE o manipular o CLIENTDATASET. é ele que deve ser editado, deletado, gravado, commitado....
GOSTEI 0
Nigro
24/05/2011
Apenas lembrando que não pode ter join no Dataset.
GOSTEI 0