ASP CLASSICO ASP.NET C# SQL / DATABASE VB / VBA VB.NET Todos os fóruns 

INSERT INTO COM SELECT

 Tópico anterior Próximo tópico Novo tópico

INSERT INTO COM SELECT

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#470623 - 11/01/2017 19:55:16

MOREIRA
SAO LUIS - TURU
Cadast. em:Agosto/2004


Bom, problema de lógica aqui...
preciso gravar os itens na grid, porem, só só irá ser gravado aqueles itens que não existem na tabela... consulta pelo código, nesse caso aqui referencia.

esta faltando uns parâmetros aqui. ou existe uma forma mais pratica e confiável ?

Base de Dados FireBird

  Private Sub btnGravEstq_Click()
    
    ConecBase
    Dim cd As Integer
    For i = 1 To FlexGrid.Rows
        Sql = "INSERT INTO PRODUTO ("
        Sql = Sql & "     DESCRICAO, REFERENCIA, PCODIGO) VALUES ("
        Sql = Sql & "'  " & FlexGrid.cell(i, 2).text & "',"
        Sql = Sql & "'  " & FlexGrid.cell(i, 7).text & "',"
        Sql = Sql & "'  " & idcdg + 1 & "' (SELECT REFERENCIA FROM PRODUTO WHERE REFERENCIA ='" & FlexGrid.cell(i, 7).text & "') REFERENCIA ='" & FlexGrid.cell(i, 7).text & "')"
        cnn.Execute Sql
        
    Next
    FechaBase
    MsgBox ("Operação realizada com sucesso"), vbExclamation, "ATENÇÃO"
    
End Sub


Eu não nasci, fui Compilado

#470625 - 11/01/2017 23:19:53

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Um pouquinho mais de atenção ao colar código, você adicionou o campo "REFERENCIA" duas vezes...

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470626 - 12/01/2017 00:19:16

MOREIRA
SAO LUIS - TURU
Cadast. em:Agosto/2004


KERPLUNK, boa Obersação !..

Se aprende é assim, então...!

Eu não nasci, fui Compilado

#470665 - 12/01/2017 23:35:17

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
E então, conseguiu consertar?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470667 - 13/01/2017 07:58:01

MOREIRA
SAO LUIS - TURU
Cadast. em:Agosto/2004


Última edição em 13/01/2017 07:58:40 por MOREIRA

Não amigo, nao consegui,

    

            Sql = "INSERT INTO PRODUTO ("
            Sql = Sql & "      DESCRICAO, REFERENCIA, PCODIGO) VALUES ("
            Sql = Sql & "'   " & FlexGrid.cell(i, 2).text & "',"
            Sql = Sql & "'   " & FlexGrid.cell(i, 7).text & "',"
            Sql = Sql & "'   " & idcdg + 1 & "' SELECT * FROM PRODUTO WHERE REFERENCIA ='" & FlexGrid.cell(i, 7).text & "')"
            cnn.Execute Sql



mas não estou conseguindo chegar ao resultado...

retorna o campo REFERENCIA nao registrado.


Eu não nasci, fui Compilado

#470671 - 13/01/2017 08:47:47

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


'INSERT INTO PRODUTO (DESCRICAO, REFERENCIA, PCODIGO) VALUES ('" & FlexGrid.cell(i, 2).text & "', '" & FlexGrid.cell(i, 7).text & "', '" & idcdg + 1 & "' WHERE NOT EXISTS ( SELECT * FROM PRODUTO WHERE REFERENCIA ='" & FlexGrid.cell(i, 7).text & "')"

Neste caso irá inserir os valores se a referencia igual ao valor no flex grid não existir.

Só confira apostrofos (') e aspas (") se estão corretos. rsrsrs

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#470673 - 13/01/2017 08:56:38

MOREIRA
SAO LUIS - TURU
Cadast. em:Agosto/2004


Recebi os valores, mas não inserta nada na tabela.
              Sql = "INSERT INTO PRODUTO (DESCRICAO, REFERENCIA, PCODIGO) VALUES ('" & FlexGrid.cell(i, 2).text & "', '" & FlexGrid.cell(i, 7).text & "', '" & idcdg + 1 & "' WHERE NOT EXISTS ( SELECT * FROM PRODUTO WHERE REFERENCIA ='" & FlexGrid.cell(i, 7).text & "')"


Eu não nasci, fui Compilado

#470674 - 13/01/2017 10:04:34

LLAIA
ITABORAI
Cadast. em:Maio/2009


Está invocando o COMMIT ?

Leandro Laia  
“Quando tudo o que você tem é um martelo, todos os problemas parecem pregos”

#470719 - 15/01/2017 14:52:08

MOREIRA
SAO LUIS - TURU
Cadast. em:Agosto/2004


Citação:
:
Está invocando o COMMIT ?



olá, LLAIA, não, não invoquei o COMMIT.

achas que dessa forma que estou fazendo esta errado, na sua opnião, como devo fazer... pesquisar na Grid e insertar apenas os itens que não estão  cadastrados.

Eu não nasci, fui Compilado

#470726 - 15/01/2017 19:27:04

MARCOSLING
SAO PAULO
Cadast. em:Agosto/2008


Vc poderia postar a estrutura da tabela e o conteudo da variavel sql.



#470732 - 15/01/2017 23:31:43

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
1 - A maneira que você está fazendo é terrível. Concatenando strings é pedir pra ter erros.
2 - Se está usando .NET o que é o que parece, você deveria usar blocos using. Isso elimina memory leaks, tornando sua aplicação consideravelmente mais estável, segura e eficiente.
3 - Acho que você não entendeu bem o que é uma subquery, mas vamos lá à explicação:
Quando você faz uma query(SELECT), você pode especificar que campos quer trazer no resultado. O caracter coringa '*' funciona da mesma maneira que os caracteres coringa do DOS, onde o asterisco substitui todos os campos que estiverem na tabela. Já numa query de inserção, a especificação de campos e de valores correspondentes é obrigatória. E você pode especificar um valor usando uma query de select dentro de uma query de insert sem o menor problema. O caso é que você está usando asterisco, onde deveria especificar o campo, pois para uma query de insert cada campo especificado precisa de um único valor. Portanto sua query deveria ser:

Sql = "INSERT INTO PRODUTO (DESCRICAO, REFERENCIA, PCODIGO) VALUES ('" & FlexGrid.cell(i, 2).text & "', '" & FlexGrid.cell(i, 7).text & "', '" & idcdg + 1 & "' WHERE NOT EXISTS ( SELECT NOME_DE_UM_CAMPO FROM PRODUTO WHERE REFERENCIA ='" & FlexGrid.cell(i, 7).text & "')"

Na parte destacada em vermelho, você estava anteriormente especificando o caracter coringa '*' e você deveria especificar apenas um campo, pois trata-se de um dos valores da query de INSERT, no caso, referente ao campo "PCODIGO". Por isso, substitua a parte em vermelho pelo campo de onde quer que o valor seja pego.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MOREIRA em 30/01/2017 00:47:32