Fórum insert dbexpress+delphi7+oracle #417299

23/05/2012

0

Estou com um problema na empresa no qual quero fazer um insert no B.D oracle utilizando o Dbexpress.
SQLConnection conectado ao banco. sqlquery1 conectado ao sqlconnection. DataSetProvider1 conectado ao sqlquery1. Clientdataset1 conectado ao DataSetProvider1. Datasource1 conectado ao Clientdataset1. No buttonclick esta o seguinte comando:
sqlquery1.Close;
sqlquery1.Open;
sqlquery1.SQL.Text := insert into pcbairro (codbairro,descricao) values (:CODBAIRRO,:BAIRRO);
sqlquery1.ParamByName(CODBAIRRO).Value := EDIT1.Text;
sqlquery1.ParamByName(BAIRRO).Value := EDIT2.Text;
sqlquery1.ExecSQL;
Esse comando inseriu no banco, porém com seguinte erro:
ACCESS VIOLATION AT ADDRESS 01253A24 MODULE DBEXPORA.DLL.
Estou fazendo um teste nesse comando simples para depois implementar o insert atraves de outras tabelas.
Obrigado!
Marcos Souza

Marcos Souza

Responder

Posts

23/05/2012

Joel Rodrigues

Provavelmente é algum componente não instanciado. Depure o código para ver exatamente onde está ocorrendo o problema.
Responder

Gostei + 0

23/05/2012

Marcos Souza

Nao sei se fiz da forma correta, pois esses comandos estao no tbutton. O sqlquery1 na verdade consta apenas uma consulta simples (select * from pcbairro), apenas para fazer conexao com sqlconnection. A depuração deu erro na linha abaixo:
sqlquery1.ExecSQL;

Responder

Gostei + 0

23/05/2012

Joel Rodrigues

Existe mais algum comando na tela que possa estar sendo executado?
Responder

Gostei + 0

23/05/2012

Marcos Souza

Não. É somente isso mesmo. Insert basico para depois ser implementado.
Responder

Gostei + 0

23/05/2012

Joel Rodrigues

Bom, se é uma SQLQuery para inserção, você não precisa do SELECT inicial, certo? Use um controle para cada função. Retire o select que consta na query e os comandos Close e o Open antes da execução. Vejamos no que dá.
Responder

Gostei + 0

23/05/2012

Marcos Souza

Caso eu retire o comando sql da query o mesmo nao fica ativo. Apresenta o seguinte erro ao tentar iniciar a query:
missing query, table name or procedure name.
Responder

Gostei + 0

23/05/2012

Joel Rodrigues

Cara, vamos começar o tratamento de choque:
- como é uma instrução de inserção, você não precisa de DataSetProvider nem ClientDataSet, desligue-os da SQLQuery.
- Defina a instrução de inserção em tempo de design e, em runtime, passe apenas os parâmetros.

Vamos ver no que dá...
Responder

Gostei + 0

23/05/2012

Marcos Souza

Bom, nao sou programador, portanto desculpe por talvez nao ter entendido o que quis dizer. Fiz o seguinte, coloquei o comando: insert into pcbairro (codbairro,descricao) values (:CODBAIRRO,:BAIRRO) na propriedade SQL da query e deixei no button apenas os parametros. Quando fui ativar a query aparece a seguinte mensagem: CANNOT INSERT NULL INTO (BASEDADOS.PCBAIRRO.CODBAIRRO).
Sera que o problema nao pode ser por causa que o campo DESCRICAO é um campo CHAR, no qual aceita qualquer tipo de caracteres e o oracle para entender esses caracteres, é necessaio estar com aspas simples . Caso eu informe dentro das aspas simples o proprio delphi informa erro: MISSING OPERATOR OR SIMICOLON.
Responder

Gostei + 0

23/05/2012

Joel Rodrigues

Você não deve ativar a query, deve apenas chamar o ExecSQL a partir do código.
Responder

Gostei + 0

23/05/2012

Marcos Souza

Mesmo nao ativando, eu executo, preencho os edits e quando clico no button ele informa a mesma mensagem:
cannot insert null...
Responder

Gostei + 0

25/05/2012

Marcos Souza

Joel, consegui fazer o insert da seguinte forma:
sqlquery1.Close;
SQLQUERY1.Open;
SQLQUERY1.SQL.Clear;
sqlquery1.SQL.Add(insert into pcbairro(codbairro,descricao) values (+QuotedStr(EDIT1.Text)+,+QuotedStr(EDIT2.Text)+));
//sqlquery1.ParamByName(CODBAIRRO).Value := EDIT1.Text;
//sqlquery1.ParamByName(BAIRRO).AsString := EDIT2.Text;
SQLQUERY1.ExecSQL(TRUE);
Caso possa me dar mais alguma dica referente o porque o registro nao inclui duas vezes seguidas. Ex: inseri o codbairro 1 e sua descricao. Quando informo manualmente codigo 2 e sua descricao, o delphi entende que ainda é codigo 1, entao fica dois codigos 1 gravado no banco. Sabe como proceder quanto a isso?
Responder

Gostei + 0

25/05/2012

Marcos Souza

Achei o problema. Debuguei novamente e vi que a linha abaixo esta abrindo novamente a query e ocasionava o erro. Agora esta funcionando perfeitamente e ja vou incrementar o restante do insert.
SQLQUERY1.Open;

Obrigado!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar