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

insert into com muitos campos


Macêdo

Pergunta

Pessoal, preciso fazer um insert into numa tabela do BD Access com dados de uma plan Excel que possui 98 colunas, as quais são as mesmas do BD access (98 campos com os mesmos nomes dos cabeçalhos das colunas excel) a planilha é padrão. Tem como passar este insert sem ter que listar campo a campo ? pois sempre faço da seguinte forma:

Private Sub inserir()

With cmd
            .ActiveConnection = cnn
            .CommandType = adCmdText
            .CommandText = "insert into dependentes " & _
            "(cod, matricula, cpf, nome, rg, nascimento, cod_socio) values (" & _
            vCod_dependente & ",'" & _
            Text_cod & "', '" & _
            Text_cpf & "','" & _
            Text_nome & "','" & _
            Text_rg & "','" & _
            Text_nascimento & "'," & _
            vCod_socio & ");"
            .Execute
            End With
End Sub

Imagina fazer isto com 98 campos ? quanto a quantidade de linhas não teria problema, pois colocaria apenas um FOR NEXT para ir inserindo linha a linha da planilha, o problema é mesmo a quantidade de Colunas(Excel) = Quantidade de Campos (BD)

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

se não me engano você não precisa digitar o nome dos campos. se você fizer so isso deve funcionar:

Insert Into Tabela Values(valores)

teste ai, você so precisa escrever os valores no values (ai como não estao especificados quais o campos, você teria q escrever os valores de todos e na ordem q esta na tabela no access).

e ai você pode fazer tb um for pra cada coluna do excel então não vai ter problema.

alias, mesmo os nomes dos campos você podia fazer com um for. tipo, antes do insert faca um select top 1 na tabela so pra pegar os nomes e faca um for no recordset pegando rs.Fields(indice).Name

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi, mesmo escrevendo só os valores dos Values ainda fica grande, terei que relacionar os 98 nomes das colunas da plan.

Pensei em outra coisa, jogar primeiro num listView e depois jogar do lsitView no BD, mas terei que aprender a lançar os dados do list no BD tambem.

Outra cousa que consegui fazer foi com um pequeno FOR criar um Recordset Desconectado e carreguei todos estes dados, ou seja o recordset desconectado ficou igual a planilha, se tivesse como jogar este Rs no BD...

webdeveloper

Este banco fica em REDE e é acessado por inumeros vendedores através do meu programa, cada um possue esta planilha para importar os dados de sua produção constantes na planilha para a base de dados.

Editado por Macêdo
Link para o comentário
Compartilhar em outros sites

  • 0
Kuroi, mesmo escrevendo só os valores dos Values ainda fica grande, terei que relacionar os 98 nomes das colunas da plan.

Pensei em outra coisa, jogar primeiro num listView e depois jogar do lsitView no BD, mas terei que aprender a lançar os dados do list no BD tambem.

então... mas não tem como você fazer um for tb pras colunas do excel?? tipo em vez de escrever o nome da coluna pegue pelo numero.

exemplo, em vez de escrever o nome, escreve coluna 1, 2, 3, etc...

ai você consegue por num for e ai fica muito simples.

so não te passo o codigo porque não lembro mesmo nd de trabalhar com excel, mas assim como você acessa a coluna pelo nome, poderia acessar pelo indice facil não??

logico q isso so vai dar certo se, no excel, as colunas tiverem na mesma ordem q no access.

Outra cousa que consegui fazer foi com um pequeno FOR criar um Recordset Desconectado e carreguei todos estes dados, ou seja o recordset desconectado ficou igual a planilha, se tivesse como jogar este Rs no BD...

essa parte não entendi. como você preenche um recordset desconectado??

você fez tipo um select a partir do excel foi isso??

você poderia então talvez fazer um for nesse recordset pra construir o select.

Link para o comentário
Compartilhar em outros sites

  • 0

Então kuroi, me diz uma coisa, se fosse pra você inserir os dados de um Flex no BD como faria ? da pra passar um exemplo assim:

No flex

Coluna1 Coluna2 Coluna3 Coluna4

texto texto texto texto

texto texto texto texto

texto texto texto texto

sendo que o BD tem a mesma quantidade de colunas e estão na mesma ordem, como ficaria o FOR com o INSERT INTO neste caso ?

Link para o comentário
Compartilhar em outros sites

  • 0

assim:

For i = 1 To MSFlexGrid1.Rows
    sql = "Insert Into Tabela Values("
    For j = 1 To MSFlexGrid1.Cols
        sql = sql & MSFlexGrid1.TextMatrix(i, j) & _
            IIf(j <> MSFlexGrid1.Cols, ",", ")")
    Next
    cn.Execute sql
Next[/code] o unico problema agora é se você tiver tipos de campos diferentes e precisar formatar numeros e detas, e saber quando tem q por ' '. nesse caso você poderia fazer tipo um select no recordset e verificar os tipos. exemplo:
[code]Set rs = cn.Execute("Select Top 1 * From Tabela")
For i = 1 To MSFlexGrid1.Rows
    sql = "Insert Into Tabela Values("
    For j = 1 To MSFlexGrid1.Cols
        If rs.Fields(j).Type = adVarWChar Then
            'Aqui insere como texto
        ElseIf rs.Fields(j).Type = ...
             ...
             ...
        End If
    Next
    cn.Execute sql
Next

Link para o comentário
Compartilhar em outros sites

  • 0

acho q não, fazer essas operacoes com colunas nos flexgrid enchem mesmo o saco. acho q o q acontece teria q ser o for ate MSFlexGrid1.Cols - 1 e o outro ate MSFlexGrid1.Rows - 1.

se você tem 38 colunas o indice vai do 0 ao 37, não??

mas acho q o indice tem q comecar no 1 como no exemplo, porque o flexgrid normalmente tem uma coluna fixa a esquerda (em cinza) e ela é contada tb.

então se você tem 38 colunas, na verdade o Cols retorna 39. e o indice iria então de 1 ate 38. ou seja tem q ir ate MSFlexGrid1.Cols - 1 em vez de ate MSFlexGrid1.Cols como eu tinha passado.

bom, veja ai, tb vai depender de como ta configurado o flexgrid, e talvez se tiver mesmo alguma diferenca entre o flex e o hierarchical.

mas tente alguma coisa tipo assim:

For i = 1 To MSFlexGrid1.Rows - 1
    sql = "Insert Into Tabela Values("
    For j = 1 To MSFlexGrid1.Cols - 1
        sql = sql & MSFlexGrid1.TextMatrix(i, j) & _
            IIf(j <> MSFlexGrid1.Cols, ",", ")")
    Next
    cn.Execute sql
Next[/code]

a e quanto as linhas, tb normalmente fica uma linha em branco no final não?? veja ai, se tiver, ela tb não poderia entrar (você teria q fazer o for de cima ate Rows - 2).

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...