Jump to content
Fórum Script Brasil
  • 0

Update E Insert Em Sql E Delphi


Zolhos

Question

"Putz esse Zólhos de novo fazendo pergunta!"

Não se procupem pessoal. Já estou terminando meu projeto. Falta só alguns detalhes finais =P

E um deles é esse...

Como fazer insert e update em sql em delphi?

Eu tentei fazer de um jeito aqui mas deu altos bugs

vou mostrar pra vocês

else
{if novoProduto = false. isso é uma continuação de um if...}
    begin
         linhas := 1;
         while linhas < grdProdIngredientes.rowCount do
               begin
                    sqlProdGrid := 'SELECT * FROM Ingredientes WHERE ingrCodigoProduto = '+mskProdCodigo.text+' and ingrTipoIngrediente = ''' +grdProdIngredientes.cells[0,linhas]+ ''' ';
                    qryProdGrid.sql.clear;
                    qryProdGrid.sql.add(sqlProdGrid);
                    qryProdGrid.open;
                    if qryProdGrid.recordCount = 1 then
                       begin
                            showmessage('editando');
                            qryProdGrid2.sql.clear;
                            qryProdGrid2.sql.add('UPDATE Ingredientes SET ingrCodigoProduto = '+mskProdCodigo.text+', ingrTipoIngrediente = '''+grdProdIngredientes.cells[0,linhas]+''', ingrQuantidade = '+grdProdIngredientes.Cells[1,linhas]);
                            showmessage(qryProdGrid2.sql.text);
                            qryProdGrid2.open;
                            qryProdGrid2.close;
                       end
                    else
                        begin
                             showmessage('adicionando novo registro');
                             qryProdGrid2.sql.clear;
                             qryProdGrid2.sql.add('INSERT INTO Ingredientes (ingrCodigoProduto, ingrTipoIngrediente, ingrQuantidade) VALUE ('+mskProdCodigo.text+', '''+grdProdIngredientes.cells[0,linhas]+''', '+grdProdIngredientes.Cells[1,linhas]+')');
                             showmessage(qryProdGrid2.sql.text);
                             qryProdGrid2.open;
                             qryProdGrid2.close;

                        end;
                    qryProdGrid.close;
                    linhas := linhas + 1;
               end;
    end;
explicação: os showmessages servem apenas pra eu acompanhar o q tá acontecendo enquanto tou testando e tipassim o meu problema é: to fazendo certo? é q eu fiz tudo isso com base apenas em uma apostilinha BEM básica q nem falava de delphi... eu devo colocar alguma coisa entre o qryCoisa.open e o qryCoisa.close? veja a mensagem de erro que estou tendo: {essa vem na hora q to tentando editar}
Project veggie_burger.exe raised exception class ENoResultSet with message 'Error creating cursos handle'. Process stopped. Use SEP or RUN to continue
{essa vem na hora q to tentando adicionar}
project veggie_burger.exe raised exception class EDBEngineError with message 'General SQL error'. [Microsoft][Driver ODBC para microsoft Access] Syntax error in INSERT INTO statement.'. Process Stopped. Use Step or Run to continue.

help plz?

como posso concertar?

Muito obrigado!

Paulo Ricardo

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Olá Zolhos.

Além do ExecSql, tinha alguns erros, e tambem tirei a variável "sqlProdGrid" e coloquei a select direto no Sql.add('...').

Ai vai as três query:

QryProdGrid.Close;
qryProdGrid.sql.clear;
qryProdGrid.sql.add('SELECT * FROM Ingredientes WHERE ingrCodigoProduto = '+''''+mskProdCodigo.text+''''+' and ingrTipoIngrediente = '+''''+grdProdIngredientes.cells[0,linhas]+''''+'');
qryProdGrid.open;
qryProdGrid2.close;
qryProdGrid2.sql.clear;
qryProdGrid2.sql.add('UPDATE Ingredientes SET ingrCodigoProduto = '+''''+mskProdCodigo.text+''''+', ingrTipoIngrediente = '+''''+grdProdIngredientes.cells[0,linhas]+''''+', ingrQuantidade = '+''''+grdProdIngredientes.Cells[1,linhas]+''''+'');
qryProdGrid2.ExecSql;
qryProdGrid2.close;
qryProdGrid2.sql.clear;
qryProdGrid2.sql.add('INSERT INTO Ingredientes (ingrCodigoProduto, ingrTipoIngrediente, ingrQuantidade) VALUE ('+''''+mskProdCodigo.text+''''+', '+''''+grdProdIngredientes.cells[0,linhas]+''''+', '+''''+grdProdIngredientes.Cells[1,linhas]+''''+')');
qryProdGrid2.ExecSql;

Qualquer dúvida, posta ae falou! wink.gif

Abs. Progr'amador

Link to comment
Share on other sites

  • 0

você me corrigiu sobre a sintaxe

mas na verdade c tava errado

porque eu to usando alguns campos numéricos

eu cliquei com o botao direito e dei EXPLORE no meu sql e descobri q dá certo assim:

insert into Ingredientes (ingrCodigoProduto, ingrTipoIngrediente, ingrQuantidade) VALUES (1, 'Abacate', 3);

detalhe:::::: é VALUES

EDIT:

fiz algo de errado no banco de dados...

o update tem algo errado

quando ele faz o update ele apaga um monte de registro e adiciona várias vezes o mesmo

acho que seria porque o qry tá na posicao errada da tabela ou algo assim?

vou postar o código

mas eu sei q vai ser complicado vocês ajudarem =/

linhas := 1;
         while linhas < grdProdIngredientes.rowCount do
               begin
                    sqlProdGrid := 'SELECT * FROM Ingredientes WHERE ingrCodigoProduto = '+mskProdCodigo.text+' and ingrTipoIngrediente = ''' +grdProdIngredientes.cells[0,linhas]+ ''' ';
                    qryProdGrid.sql.clear;
                    qryProdGrid.sql.add(sqlProdGrid);
                    qryProdGrid.open;
                    showmessage(qryProdGrid.sql.text);
                    showmessage(intToStr(qryProdGrid.recordCount));
                    if qryProdGrid.recordCount = 1 then
                       begin
                            showmessage('editando');
                            qryProdGrid2.sql.clear;
                            qryProdGrid2.sql.add('UPDATE Ingredientes SET ingrCodigoProduto = '+mskProdCodigo.text+', ingrTipoIngrediente = '''+grdProdIngredientes.cells[0,linhas]+''', ingrQuantidade = '+grdProdIngredientes.Cells[1,linhas]);
                            showmessage(qryProdGrid2.sql.text);
                            qryProdGrid2.execSql;
                       end
                    else
                        begin
                             showmessage('adicionando novo registro');
                             qryProdGrid2.sql.clear;
                             qryProdGrid2.sql.add('INSERT INTO Ingredientes (ingrCodigoProduto, ingrTipoIngrediente, ingrQuantidade) VALUES ('+mskProdCodigo.text+', '+''''+grdProdIngredientes.cells[0,linhas]+''''+', '+grdProdIngredientes.Cells[1,linhas]+')');
                             showmessage(qryProdGrid2.sql.text);
                             qryProdGrid2.execSql;
                             showmessage('adicionou o novo registro');
                        end;
                    qryProdGrid.close;
                    linhas := linhas + 1;
               end;

pode ser q tenha algum end a mais ou a menos por causa da unit

mas não é erro de sintaxe isso eu sei... é erro de lógica mesmo... como q devo fazer?

Link to comment
Share on other sites

  • 0
Olá Zolhos.

Além do ExecSql, tinha alguns erros, e tambem tirei a variável "sqlProdGrid" e coloquei a select direto no Sql.add('...').

Ai vai as três query:

QryProdGrid.Close;
qryProdGrid.sql.clear;
qryProdGrid.sql.add('SELECT * FROM Ingredientes WHERE ingrCodigoProduto = '+''''+mskProdCodigo.text+''''+' and ingrTipoIngrediente = '+''''+grdProdIngredientes.cells[0,linhas]+''''+'');
qryProdGrid.open;
qryProdGrid2.close;
qryProdGrid2.sql.clear;
qryProdGrid2.sql.add('UPDATE Ingredientes SET ingrCodigoProduto = '+''''+mskProdCodigo.text+''''+', ingrTipoIngrediente = '+''''+grdProdIngredientes.cells[0,linhas]+''''+', ingrQuantidade = '+''''+grdProdIngredientes.Cells[1,linhas]+''''+'');
qryProdGrid2.ExecSql;
qryProdGrid2.close;
qryProdGrid2.sql.clear;
qryProdGrid2.sql.add('INSERT INTO Ingredientes (ingrCodigoProduto, ingrTipoIngrediente, ingrQuantidade) VALUE ('+''''+mskProdCodigo.text+''''+', '+''''+grdProdIngredientes.cells[0,linhas]+''''+', '+''''+grdProdIngredientes.Cells[1,linhas]+''''+')');
qryProdGrid2.ExecSql;

Qualquer dúvida, posta ae falou! ;)

Abs. Progr'amador

Olá

O sql seguinte retorna erro. Alguém dá uma ajuda?

query1.close;

query1.sql.clear;

query1.sql.add('INSERT INTO custos_criancas (custo) VALUE ("teste")');

query1.ExecSql;

Cumprimentos

Link to comment
Share on other sites

  • 0

Zolhos,

Vê só, penso que você deveria reformular seu código, ao invés da condição do while estar verificando o nrº de linhas do grid, você deveria verificar se o registro da query é final de arquivo, tipo( while not query.eof do), pois seu grid esta ligado a uma query através de um datasoure. Dai você evitaria de estar fazendo um select dentro do loop.

as colunas do grid são preenchidas pelo dataset, dai você passa os valores para sua sentença sql(update ou insert) os campos que alimentam estas colunas, ou seja, os datafield das colunas.

Link to comment
Share on other sites

  • 0
Zolhos,

Vê só, penso que você deveria reformular seu código, ao invés da condição do while estar verificando o nrº de linhas do grid, você deveria verificar se o registro da query é final de arquivo, tipo( while not query.eof do), pois seu grid esta ligado a uma query através de um datasoure. Dai você evitaria de estar fazendo um select dentro do loop.

Recife, acho que você se atrapalhou um pouquinho por aqui. :D

O post do Zolhos é de 2004 e foi ressucitado pelo colega Mario Lopes que por algum motivo fez um post sem relação com ele.

Ainda a resposta ao Zolhos, a observação não é válida porque realmente ele utiliza um StringGrid e não um DBGrid, observe que ele trata o grid deste modo: grdProdIngredientes.cells[0,linhas], e esta propriedade está disponível apenas no StringGrid. ;)

O sql seguinte retorna erro. Alguém dá uma ajuda?

query1.close;

query1.sql.clear;

query1.sql.add('INSERT INTO custos_criancas (custo) VALUE ("teste")');

query1.ExecSql;

Mario Lopes, que tal você postar qual é este "...seguinte erro".

Abraços

Link to comment
Share on other sites

  • 0
Zolhos,

Vê só, penso que você deveria reformular seu código, ao invés da condição do while estar verificando o nrº de linhas do grid, você deveria verificar se o registro da query é final de arquivo, tipo( while not query.eof do), pois seu grid esta ligado a uma query através de um datasoure. Dai você evitaria de estar fazendo um select dentro do loop.

Recife, acho que você se atrapalhou um pouquinho por aqui. :D

O post do Zolhos é de 2004 e foi ressucitado pelo colega Mario Lopes que por algum motivo fez um post sem relação com ele.

Ainda a resposta ao Zolhos, a observação não é válida porque realmente ele utiliza um StringGrid e não um DBGrid, observe que ele trata o grid deste modo: grdProdIngredientes.cells[0,linhas], e esta propriedade está disponível apenas no StringGrid. ;)

O sql seguinte retorna erro. Alguém dá uma ajuda?

query1.close;

query1.sql.clear;

query1.sql.add('INSERT INTO custos_criancas (custo) VALUE ("teste")');

query1.ExecSql;

Mario Lopes, que tal você postar qual é este "...seguinte erro".

Abraços

Olá

Cá está o sql correcto:

queryinsere.sql.add('Insert Into apagar (Nome,data,total,ano_recibo,mes,bi) '+' Values (:nome,:data,:total,:ano_recibo,:mes,:bi)');

Cumprimentos

Mário Lopes

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...