INSERT INTO TABELA2 SELECT * FROM TABELA1

DJHASSELMANN 28/12/2024 23:02:46
#503724
Olá a todos!

Estou precisando de uma ajuda, é o seguinte tenho este código


 Private Sub dlgImpressao_Load(sender As Object, e As EventArgs) Handles Me.Load

Dim NomeTabela As String = "TbTMPIMP"

Try

gMensagem = "Leitura da Janela Chamadora"

If lJanelaChamadora = "FrmClientes" Then
Text = My.Application.Info.Title & " - Impressão do Cadastro de Clientes"
lTabela = "TbClientes"
lCampoChave = "IdCliente"
lCampo = "RazaoSocial"
ElseIf lJanelaChamadora = "FrmFornecedores" Then
Text = My.Application.Info.Title & " - Impressão do Cadastro de Fornecedores"
lTabela = "tbFornecedor"
lCampoChave = "IdFornecedor"
lCampo = "RazaoSocial"
ElseIf lJanelaChamadora = "FrmCadProdutos" Then
Text = My.Application.Info.Title & " - Impressão do Cadastro de Produtos Produzidos"
grbTipo.Enabled = False
lTabela = "tbProduto"
lCampoChave = "IdProduto"
lCampo = "Produto"
'ElseIf lJanelaChamadora.Name = "FrmMateriaPrima" Then
' Text = My.Application.Info.Title & " - Impressão do Cadastro de Matérias Primas"
' grbTipo.Enabled = False
' lTabela = "tbTemporaria"
' lCampoChave = "Mar_IdMateriaPrima"
' lCampo = "Descricao"

' lTabela1 = "tbMateriaPrima"
' lCampoChave1 = "IdMateriaPrima"
' lCampo1 = "Descricao"
End If

gMensagem = "Abrindo Conexão"
If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gMensagem = "Procurando Tabela Temporária"
If Not (NomeTabela = String.Empty) Then
If ExisteTabela(gCN, NomeTabela) = True Then
gSQL = "DROP TABLE tbTMPIMP"
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()
gCMD.Dispose()
End If
End If

gMensagem = "Criando Tabela Temporaria para Impressão 1"
gSQL = "SELECT * INTO TbTMPIMP FROM " & lTabela & " where 1=0"
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

gMensagem = "Preenchendo Lista para Seleção"
If lJanelaChamadora = "FrmMateriaPrima" Then
PreencherLista(lstSelecao, lTabela1, lCampoChave1, lCampo1)
Else
PreencherLista(lstSelecao, lTabela, lCampoChave, lCampo)
End If

If lstSelecao.Items.Count = 0 Then
btnSelecionaUm.Enabled = False
btnSelecionaTudo.Enabled = False
End If

btnRetornaUm.Enabled = False
btnRetornaTudo.Enabled = False
btnImprimir.Enabled = False

Exit Sub

Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, gMensagem)
End Try

End Sub

Private Sub btnImprimir_Click(sender As Object, e As EventArgs) Handles btnImprimir.Click

Try

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gMensagem = "Limpando tabela temporaria para Impressão"
gSQL = "Delete from TbTMPIMP"
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

gMensagem = "Transferindo dados para Impressão"
If lJanelaChamadora = "FrmClientes" Then

For X = 0 To (lstSelecionado.Items.Count - 1)

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gSQL = "INSERT INTO tbTMPIMP Select * from tbClientes Where IdCliente = " & CLng(lstSelecionado.Items(X).valor)
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

Next X

ElseIf lJanelaChamadora = "FrmFornecedores" Then

For X = 0 To (lstSelecionado.Items.Count - 1)

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gMensagem = "Inserindo dados na tbTMPIMP"
gSQL = "INSERT INTO tbTMPIMP Select * from tbFornecedor Where IdFornecedor = " & CLng(lstSelecionado.Items(X).valor)
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

Next X

ElseIf lJanelaChamadora = "FrmCadProdutos" Then

For X = 0 To (lstSelecionado.Items.Count - 1)

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gSQL = "INSERT INTO tbTMPIMP Select * from tbProduto Where IdProduto = " & CLng(lstSelecionado.Items(X).valor)
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

Next X

ElseIf lJanelaChamadora = "FrmMateriaPrima" Then

For X = 0 To (lstSelecionado.Items.Count - 1)

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gSQL = "INSERT INTO tbTMPIMP Select * from tbTemporaria Where " &
"Mar_IdMateriaPrima = " & CLng(lstSelecionado.Items(X).valor)
gCMD = New SqlCommand(gSQL, gCN)
gCMD.ExecuteNonQuery()

Next X

End If

If gCN.State = ConnectionState.Open Then gCN.Close()
gCN.Open()

gSQL = "Select Count(*) from tbTMPIMP"
gCMD.CommandText = (gSQL)
lContador = gCMD.ExecuteScalar

If lContador > 0 Then
If MsgBox("Confirma Realmente a Impressão?", vbQuestion + vbYesNo, "IMPRESSÃO") = vbYes Then
Call Imp_Cadastro()
Else
btnImprimir.Focus()
End If
End If

Exit Sub

Catch ex As Exception
MsgBox(gMensagem & vbCrLf & ex.Message, MsgBoxStyle.Critical, "IMPRESSÃO")
End Try

End Sub


Bom na primeira parte o código onde crio a tabela temporária tudo ok sem erros, o que acontece quando clico no botão OK do form de impressão desta feita recebo a mensagem "Um valor explicito para a coluna de identidade na tabela 'tbTMPIMP' só pode ser especificado quando uma lista de colunas é usada e o Valor de IDENTITY_INSERT é ON. Não estou conseguindo resolver tal problema, uma porque são varios campos da Tabela Clientes (é um cadastro) para eu listar todos. Se alguém puder ajudar fico imensamente grato!

Obrigado!
NETMANIA 30/12/2024 10:13:58
#503728
Resposta escolhida
Você meio que respondeu a sua questão (que você deve ter um campo de auto incremento sendo criado na tabela temporária), nesse caso, se você informar qual o banco de dados que você está usando. Assumindo que você esteja usando SQL Server, seria algo assim:

-- Força a inserção via o campo de auto incremento
SET INDENTITY_INSERT tbTMPIMP ON;

-- Insert Select
INSERT INTO tbTMPIMP SELECT * FROM tabela origem;

-- Desativa a primeira operação
SET INDENTITY_INSERT tbTMPIMP OFF;

Nesse caso, você pode ver se aceita os três comandos de uma vez:

SET INDENTITY_INSERT tbTMPIMP ON; INSERT INTO tbTMPIMP SELECT * FROM tabela origem; SET INDENTITY_INSERT tbTMPIMP OFF;

Fonte: https://iurievargas.medium.com/como-inserir-valores-em-uma-coluna-de-identidade-no-sql-server-45ff69c92f05
DJHASSELMANN 02/01/2025 21:41:37
#503733
Valeu, vou encerrar este topico!
Tópico encerrado , respostas não são mais permitidas