Ir para conteúdo
Fórum Script Brasil
  • 0

Update E Insert Em Sql E Delphi


Zolhos

Pergunta

"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 para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...