Gravando dados em query
Olá pessoal,
Estou trabalhando com o SQL 7.0 e Delphi 5. Tenho umas tabelas que são muito grandes e estou pensando em deixar de utilizar o TTable e passar a usar TQuery. Como faço para salvar as alterações efetuadas na consulta direto no banco de dados ? Esta forma de trabalhar é segura ?
Grato,
José
Estou trabalhando com o SQL 7.0 e Delphi 5. Tenho umas tabelas que são muito grandes e estou pensando em deixar de utilizar o TTable e passar a usar TQuery. Como faço para salvar as alterações efetuadas na consulta direto no banco de dados ? Esta forma de trabalhar é segura ?
Grato,
José
Anonymous
Curtidas 0
Respostas
Wallace
02/04/2003
José,
Vc poderia comecar passando a propriedade RequestLive para True. Mas existem algumas restricoes no SQL, como:
* nao pode existir GROUP BY, HAVING.
* ORDER BY com uma coluna que nao possui indice
* nao pode usar distinct
* nao pode usar Join
* nao pode usar subquery
Bom... se isto nao for problema, tudo bem. Dá para continuar. Bom... tem um probleminha com esta estratégica. Quando vc insere um registro, vc vai precisar fechar e abrir novamente a consulta. Infelizmente o conteudo do dataset é uma foto, e vc precisa atualiza-la. Na medida que vc for caminhando, vai descobrir que o recurso de CachedUpdates será muito interessante.
Bom... eu recomendo o seguinte: utilize o ClientDataSet. Lique ele num Provider e este último em uma Query. Utilize o providerflags dos fields da query e vc podera colocar join nesta última. Utilize o cache do clientdataset e implementar interfaces sofisticadas.
Nao tem jeito. Se um dia vc tiver ue mudar para DBExpress, vai ter de dominar o ClientDataSet.
Vc poderia comecar passando a propriedade RequestLive para True. Mas existem algumas restricoes no SQL, como:
* nao pode existir GROUP BY, HAVING.
* ORDER BY com uma coluna que nao possui indice
* nao pode usar distinct
* nao pode usar Join
* nao pode usar subquery
Bom... se isto nao for problema, tudo bem. Dá para continuar. Bom... tem um probleminha com esta estratégica. Quando vc insere um registro, vc vai precisar fechar e abrir novamente a consulta. Infelizmente o conteudo do dataset é uma foto, e vc precisa atualiza-la. Na medida que vc for caminhando, vai descobrir que o recurso de CachedUpdates será muito interessante.
Bom... eu recomendo o seguinte: utilize o ClientDataSet. Lique ele num Provider e este último em uma Query. Utilize o providerflags dos fields da query e vc podera colocar join nesta última. Utilize o cache do clientdataset e implementar interfaces sofisticadas.
Nao tem jeito. Se um dia vc tiver ue mudar para DBExpress, vai ter de dominar o ClientDataSet.
GOSTEI 0
Anonymous
02/04/2003
Olá pessoal,
Estou trabalhando com o SQL 7.0 e Delphi 5. Tenho umas tabelas que são muito grandes e estou pensando em deixar de utilizar o TTable e passar a usar TQuery. Como faço para salvar as alterações efetuadas na consulta direto no banco de dados ? Esta forma de trabalhar é segura ?
Grato,
José
Siga o exemplo que dara certo
[color=blue:4200d4177f] SQL_Clientes.Close;
SQL_Clientes.Sql.Clear;
SQL_Clientes.SQL.ADD(´ INSERT INTO Clientes ´);
SQL_Clientes.SQL.ADD(´ (Cod_Cliente´);
SQL_Clientes.SQL.ADD(´ ,Cliente´);
SQL_Clientes.SQL.ADD(´ ,Endereco´);
SQL_Clientes.SQL.ADD(´ ,Municipio´);
SQL_Clientes.SQL.ADD(´ ,Bairro´);
If ME_DataCad.Text <> (´ / / ´) Then
SQL_Clientes.SQL.ADD(´ ,DataCad´);
SQL_Clientes.SQL.ADD(´ ,Cep´);
SQL_Clientes.SQL.ADD(´ ,UF´);
If ME_Fone.Text <> ´ ( XX ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Fone´);
If ME_Celular.Text <> ´( ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Celular´);
SQL_Clientes.SQL.ADD(´ ,InsEst´);
If ME_CNPJ.Text <> ´ . . / - ´ Then
SQL_Clientes.SQL.ADD(´ ,CNPJ´);
IF ME_CPF.Text <> ´ . . - ´ Then
SQL_Clientes.SQL.ADD(´ ,CPF´);
SQL_Clientes.SQL.ADD(´ ,Obs) ´);
SQL_Clientes.SQL.ADD(´ VALUES (´´+IntToStr(CodigoCliente)+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Cliente.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Endereco.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Municipio.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Bairro.Text+´´ ´);
If ME_DataCad.Text <> (´ / / ´) Then
SQL_Clientes.SQL.ADD(´ ,´´+FORMATDATETIME(´mm/dd/yyyy´, StrToDate(ME_DataCad.Text))+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Cep.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_UF.Text+´´ ´);
If ME_Fone.Text <> ´ ( XX ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_Fone.Text+´´ ´);
If ME_Celular.Text <> ´( ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_Celular.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_IEstadual.Text+´´ ´);
If ME_CNPJ.Text <> ´ . . / - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_CNPJ.Text+´´ ´);
IF ME_CPF.Text <> ´ . . - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_CPF.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Memo_Observacao.Text+´´) ´);
SQL_Clientes.Prepare;
SQL_Clientes.ExecSQL;
SQL_Clientes.SQL.CLEAR;[/color:4200d4177f]
vonirpereira@certto.com.br
GOSTEI 0
Anonymous
02/04/2003
[quote:96e49a7e58=´José´]Olá pessoal,
Estou trabalhando com o SQL 7.0 e Delphi 5. Tenho umas tabelas que são muito grandes e estou pensando em deixar de utilizar o TTable e passar a usar TQuery. Como faço para salvar as alterações efetuadas na consulta direto no banco de dados ? Esta forma de trabalhar é segura ?
Grato,
José
Siga o exemplo que dara certo
[color=blue:96e49a7e58] SQL_Clientes.Close;
SQL_Clientes.Sql.Clear;
SQL_Clientes.SQL.ADD(´ INSERT INTO Clientes ´);
SQL_Clientes.SQL.ADD(´ (Cod_Cliente´);
SQL_Clientes.SQL.ADD(´ ,Cliente´);
SQL_Clientes.SQL.ADD(´ ,Endereco´);
SQL_Clientes.SQL.ADD(´ ,Municipio´);
SQL_Clientes.SQL.ADD(´ ,Bairro´);
If ME_DataCad.Text <> (´ / / ´) Then
SQL_Clientes.SQL.ADD(´ ,DataCad´);
SQL_Clientes.SQL.ADD(´ ,Cep´);
SQL_Clientes.SQL.ADD(´ ,UF´);
If ME_Fone.Text <> ´ ( XX ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Fone´);
If ME_Celular.Text <> ´( ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Celular´);
SQL_Clientes.SQL.ADD(´ ,InsEst´);
If ME_CNPJ.Text <> ´ . . / - ´ Then
SQL_Clientes.SQL.ADD(´ ,CNPJ´);
IF ME_CPF.Text <> ´ . . - ´ Then
SQL_Clientes.SQL.ADD(´ ,CPF´);
SQL_Clientes.SQL.ADD(´ ,Obs) ´);
SQL_Clientes.SQL.ADD(´ VALUES (´´+IntToStr(CodigoCliente)+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Cliente.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Endereco.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Municipio.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Bairro.Text+´´ ´);
If ME_DataCad.Text <> (´ / / ´) Then
SQL_Clientes.SQL.ADD(´ ,´´+FORMATDATETIME(´mm/dd/yyyy´, StrToDate(ME_DataCad.Text))+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_Cep.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_UF.Text+´´ ´);
If ME_Fone.Text <> ´ ( XX ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_Fone.Text+´´ ´);
If ME_Celular.Text <> ´( ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_Celular.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Edit_IEstadual.Text+´´ ´);
If ME_CNPJ.Text <> ´ . . / - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_CNPJ.Text+´´ ´);
IF ME_CPF.Text <> ´ . . - ´ Then
SQL_Clientes.SQL.ADD(´ ,´´+ME_CPF.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,´´+Memo_Observacao.Text+´´) ´);
SQL_Clientes.Prepare;
SQL_Clientes.ExecSQL;
SQL_Clientes.SQL.CLEAR;[/color:96e49a7e58]
se for alteração faça da seguinte forma:
[color=green:96e49a7e58] SQL_Clientes.CLOSE;
SQL_Clientes.SQL.CLEAR;
SQL_Clientes.SQL.ADD(´ UPDATE Clientes ´);
SQL_Clientes.SQL.ADD(´ SET Cliente = ´´+Edit_Cliente.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,Endereco = ´´+Edit_Endereco.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,Municipio = ´´+Edit_Municipio.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,Bairro = ´´+Edit_Bairro.Text+´´ ´);
If ME_DataCad.Text <> (´ / / ´) Then
SQL_Clientes.SQL.ADD(´ ,DataCad = ´´+FORMATDATETIME(´mm/dd/yyyy´, StrToDate(ME_DataCad.Text))+´´ ´);
SQL_Clientes.SQL.ADD(´ ,Cep = ´´+Edit_Cep.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,UF = ´´+Edit_UF.Text+´´ ´);
If ME_Fone.Text <> ´ ( XX ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Fone = ´´+ME_Fone.Text+´´ ´);
If ME_Celular.Text <> ´( ) - ´ Then
SQL_Clientes.SQL.ADD(´ ,Celular = ´´+ME_Celular.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,InsEst = ´´+Edit_IEstadual.Text+´´ ´);
If ME_CNPJ.Text <> ´ . . / - ´ Then
SQL_Clientes.SQL.ADD(´ ,CNPJ = ´´+ME_CNPJ.Text+´´ ´);
IF ME_CPF.Text <> ´ . . - ´ Then
SQL_Clientes.SQL.ADD(´ ,CPF = ´´+ME_CPF.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ ,Obs = ´´+Memo_Observacao.Text+´´ ´);
SQL_Clientes.SQL.ADD(´ WHERE Cod_Cliente = ´´+Label_Codigo.Caption+´´ ´);
SQL_Clientes.Prepare;
SQL_Clientes.EXECSQL;[/color:96e49a7e58]
vonirpereira@certto.com.br[/quote:96e49a7e58]
GOSTEI 0