INSERT INTO_LISTBOX

FERRAZ 09/11/2010 10:04:20
#356952
Dia amigos, tudo bem...
venho tentando fazer um Insert Into em um banco access 2000, usando um metodo que encontrei
aqui no VbMania, como nao estou usando as mesmas caracteristicas que usei em outro estudo e mais
eu nao tenho muita habilidade com esse metodo de gravacao.

alguns campos text e o conteudo de um ListBox, descartando o cabecalho, quando eu tento gravar
ocorre um erro em tempo de execucao que diz: numero de valores da consulta e campos de destino
nao coencidem. [Ô]run time erro 2147217900(80040e14)[Ô] - esse erro foi onde eu acho que mais me
aproximei da solucao.

Modulo com a funcao para o ListBox:

Private Declare Function SendMessage Lib [Ô]user32[Ô] _
Alias [Ô]SendMessageA[Ô] (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long


Private Const LB_SETTABSTOPS = &H192

Public Sub ListColumns(lListHandle As Long)
Dim iNumColumns As Long
[ô] Coloque o nº de colunas que o ListBox e terá -1 no array a seguir:
Dim iListTabs(3) As Long
Dim Ret As Long
[ô] O ListBox terá 4 colunas
iNumColumns = 4
[ô] A 1º coluna terá 12 caracteres e a 2º 24
[ô] 24 caracteres * 2 = 24
iListTabs(0) = 96 [ô] 96/4 = 24 caracteres
iListTabs(1) = 48 [ô] 48/4 = 12 caracteres
iListTabs(2) = 48 [ô] 48/4 = 12 caracteres
iListTabs(3) = 48 [ô] 48/4 = 12 caracteres

Ret = SendMessage(lListHandle, _
LB_SETTABSTOPS, iNumColumns, iListTabs(0))

End Sub


Minha sub para tentar gravar:

Private Sub lvBConf_Click()
Dim SQL As String
Dim Dados() As String
For F = 6 To ListMov.ListCount - 1 [ô]começo a contagem do 5 por causa do cabeçalho
Dados = Split(ListMov.List(F), vbTab)
SQL = [Ô]INSERT INTO TbProjeto(Registro,DataRegistro,TpServ,Cliente,Itens,FatorUsado,TotalProjeto) VALUES ([Ô]
SQL = SQL & [Ô][ô][Ô] & TxtReg.Text & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & TxtDta.Text & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & CboTipServ.Text & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & TxtClt.Text & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & Dados(0) & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & Dados(1) & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & Dados(2) & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & Dados(3) & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & TxtFtUso.Text & [Ô][ô],[Ô]
SQL = SQL & [Ô][ô][Ô] & TxtTlProj.Text & [Ô][ô])[Ô]
Set rs = cn.Execute(SQL)
Next F
Stop
End Sub

Amigos agradeco a atencao de todos da sala.
LLAIA 09/11/2010 11:32:35
#356966
dispare um msgBox na variável SQL pra vc ver o que o Jet tá recebendo. é o prieiro passo pra ver o que tá faltando.

MsgBox  SQL
FERRAZ 09/11/2010 12:28:02
#356973
Leandro eu tinho colocado um stop para verificar e depois que vc me passou sou dica eu percebi que escrevi o comando no lugar errado, mais como eu ja desconfiava o erro ocorre porque tenho mudar a forma de calculo de meu modulo, que lida com o ListBox:

Modulo com a funcao para o ListBox:

Private Declare Function SendMessage Lib [Ô]user32[Ô] _
Alias [Ô]SendMessageA[Ô] (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long


Private Const LB_SETTABSTOPS = &H192

Public Sub ListColumns(lListHandle As Long)
Dim iNumColumns As Long
[ô] Coloque o nº de colunas que o ListBox e terá -1 no array a seguir:
Dim iListTabs(3) As Long
Dim Ret As Long
[ô] O ListBox terá 4 colunas
iNumColumns = 4
[ô] A 1º coluna terá 12 caracteres e a 2º 24
[ô] 24 caracteres * 2 = 24
iListTabs(0) = 96 [ô] 96/4 = 24 caracteres
iListTabs(1) = 48 [ô] 48/4 = 12 caracteres
iListTabs(2) = 48 [ô] 48/4 = 12 caracteres
iListTabs(3) = 48 [ô] 48/4 = 12 caracteres

Ret = SendMessage(lListHandle, _
LB_SETTABSTOPS, iNumColumns, iListTabs(0))

End Sub

Agora eu ja fiquei horas a fio e nada de solucao, veja, eu tambem deixei uma imagem com a msgbox sql.


http://img33.imageshack.us/img33/1808/imagemmcs.jpg

FERRAZ 09/11/2010 16:41:01
#357013
Leandro fico grato a vc e a todos do VbMania, que sempre tenho bons momentos aqui, valeu.

Eu conseguir resolver este problema, pegando o form de outro projeto e colocando no novo projeto e funcionou, agora tenho que saber como tenho que fazer se precisar mudar as sequencias dos campos e consulta, pois foi onde aconteceu o erro e nao conseguir solucionar. Vou estudar mais.

Mais uma vez, valeu a todos.
Tópico encerrado , respostas não são mais permitidas