Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sr.Nunes

[Resolvido] DataGrid não preenche conforme a máquina

Recommended Posts

Olá, pessoal.

Sou novo aqui no fórum e gostaria de uma ajuda.

Eu tenho um programa que estou fazendo em vb6 com banco sql server express 2005. Eu tinha criado um DSN para acessar o banco em tempo de projeto. Quando fui distribuir o aplicativo, eu tentei criar o DSN na primeira máquina (com win 98, sendo que o servidor do banco fica numa máquina com win xp), mas não consegui acesso ao banco de jeito nenhum. Resolvi mudar a maneira: estou passando a string de conexão direto no código e, em como em alguns forms há componentes ADO, resolvi mantê-los e coloquei a string nas suas propriedades. O problema da conexão ao banco aparentemente eu consegui resolver, porém agora há um outro problema...

Nestes forms que tenho o componente ADO tenho DataGrids ligados a eles. Quando eu executo o programa na minha máquina (servidor com win xp) as coisas funcionam redondinho (os datagrids preenchem corretamente). No entanto, quando levo o programa até uma máquina cliente (win 98) o datagrid não preenche.

Fiz um teste: coloquei uma msgbox para me dizer se o recordcount do ADO.recordsource é maior que zero, e ele retornou maior que zero, ou seja, o programa está acessando o banco normalmente, mas o DataGrid não é preenchido com os dados.

Alguém saberia me dizer o que pode estar ocorrendo? Acho que não é problema com OCX do DataGrid, pois copiei a OCX da máquina servidor, registrei na cliente, etc. e mesmo assim não funciona!

Estou desanimando!

Agradeço a todo e qualquer tipo de ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba, tenho que te parabenizar- esse não está fácil. Se fosse problema com a OCX, você receberia um erro dizendo algo a respeito, mas por via das dúvidas, após você coloca-lá na máquina 98, você registrou-a?

Pode portas seu código de preenchimento do grid?

Ah, só uma dica, xp não é máquina para SQL, se você conseguir um windows server, seu SQL vai rodas melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto:

 

Obrigado por sua ajuda e pela dica de mudar de SO na máquina do banco, mas aqui na empresa que trabalho o pessoal é um pouco chato para este tipo de coisa. Mais tarde, quem sabe, eu consiga.

Então... eu registrei as OCX's na máquina cliente sim. Por esse motivo é que acho que não está aí o problema. Segue o código logo abaixo, que é o momento em que passo o commandtext para o componente ADO (ADODC1) que está ligado ao meu DataGrid:

 

Private Sub Texto41_Validate(Cancel As Boolean)

Dim rs As Recordset

Dim sql As String, sql1 As String, sql2 As String, sql3 As String

Dim cn2 As New ADODB.Connection

 

 

 

On Error GoTo TrataErro

 

MousePointer = 11

cn2.ConnectionTimeout = 100

'cn2.Open "LMRDB"

cn2.Open "Driver={SQL SERVER};Server=10.216.65.96\SQLEXPRESS;Database=LMR; Trusted_Connection=yes;"

cn2.BeginTrans

 

If Texto41.Text = "" Or Texto39.Text = "" Or MesFat.Text = "" Then

MsgBox "É necessário entrar o mês de faturamento, a localidade e a rota.", vbCritical, "Atenção"

Texto41.SetFocus

Else

 

 

sql = " SELECT * FROM TBL_CRONOGRAMAS WHERE DT_FAT =" & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & " AND " & _

" LOCAL = " & Texto39.Text & " AND ROTA =" & Texto41.Text

 

Set rs = New ADODB.Recordset

Set rs.ActiveConnection = cn

rs.Open sql

 

 

DtLimLib = DatasCronograma(rs!Lib, rs!DT_FAT, rs!REF_MES, True)

DtFixa = DatasCronograma(rs!LF, rs!DT_FAT, rs!REF_MES, False)

DtFixaAnt = Day(DtFixa) & "/" & IIf(Month(DtFixa) = 1, "12", Month(DtFixa) - 1) & "/" & IIf(Month(DtFixa) = 1, Year(DtFixa) - 1, Year(DtFixa))

DtLimLibMais10 = DtLimLib + 10

DtLeitAtual = Day(DtLimLibMais10) & "/" & IIf(Month(DtLimLibMais10) = 1, "12", Month(DtLimLibMais10) - 1) & "/" & IIf(Month(DtLimLibMais10) = 1, Year(DtLimLibMais10) - 1, Year(DtLimLibMais10))

DtLeitAnt = Day(DtLeitAtual) & "/" & IIf(Month(DtLeitAtual) = 1, "12", Month(DtLeitAtual) - 1) & "/" & IIf(Month(DtLeitAtual) = 1, Year(DtLeitAtual) - 1, Year(DtLeitAtual))

QtdeDiasCorreto = CLng(CDate(DtLeitAtual) - CDate(DtLeitAnt))

rs.Close

 

sql = " SELECT DISTINCT TIPO_OSE, LEITATIV_OSE, [LMR].[dbo].[Proporc] (LEITATIV_OSE, LeitAntProd, " & _

" convert(real, DT_LEIT - CONVERT(DATETIME,'" & ConverteData(DtLeitAnt) & "',102)), " & QtdeDiasCorreto & ") AS LeitProp, " & _

" LEITREATIV_OSE, DT_LEIT, TEXTO, OBS_OSE, NUM_UC FROM Tbl_Anotacoes LEFT OUTER JOIN Tbl_Leituras " & _

" ON Tbl_Anotacoes.NUM_UC = Tbl_Leituras.NumUc " & _

" WHERE CodLocalHdl = " & Texto39.Text & _

" AND NumRotaHdl = " & Texto41.Text & _

" AND DtFathdl <>" & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & _

" AND (( MSG_ATIVA= 'S' AND DT_MSG = " & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & " ) " & _

" OR (MSG_ATIVA= 'S' AND DT_LEIT Between CONVERT(DATETIME,'" & ConverteData(DtFixaAnt) & "',102) And CONVERT(CHAR(10),CURRENT_TIMESTAMP,103)) " & _

" OR (MSG_ATIVA= 'S' AND MSG_PERM = 'S'))"

 

 

Adodc2.CommandType = adCmdText

Adodc2.RecordSource = sql

Adodc2.Refresh

 

sql = " SELECT DISTINCT * FROM Tbl_Leituras WHERE DtFatHdl =" & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & " AND CodLocalHdl= " & Texto39.Text & " AND " & _

" NumRotaHdl=" & Texto41.Text & " AND((NomeCLI In (SELECT NomeCLI FROM Tbl_Leituras As Tmp GROUP BY NomeCLI HAVING Count(*)>1 )) " & _

" AND (DtFatHdl=" & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & "))"

 

Adodc3.CommandType = adCmdText

Adodc3.RecordSource = sql

Adodc3.Refresh

 

 

sql1 = " SELECT * FROM Tbl_Leituras WHERE TipoSitUc <> " & Chr(39) & 0 & Chr(39) & " AND DtFatHdl =" & Chr(39) & _

MesfatBanco(MesFat.Text) & Chr(39) & " AND CodLocalHdl= " & Texto39.Text & " AND NumRotaHdl=" & Texto41.Text

 

Set rs = New ADODB.Recordset

Set rs.ActiveConnection = cn

rs.Open sql1

 

If Not (rs.EOF) Then

 

sql1 = " SELECT * FROM Tbl_Leituras WHERE TipoSitUc <> " & Chr(39) & 0 & Chr(39) & " AND DtFatHdl =" & Chr(39) & _

MesfatBanco(MesFat.Text) & Chr(39) & " AND CodLocalHdl= " & Texto39.Text & " AND NumRotaHdl=" & Texto41.Text & " AND LeitGrandProd IS NULL AND " & _

" CodIrreg1LeitUc <> '17'"

 

rs.Close

Set rs = New ADODB.Recordset

Set rs.ActiveConnection = cn

rs.Open sql1

 

If Not (rs.EOF) Then

sql2 = " UPDATE Tbl_Leituras SET " & _

" CodIrreg1LeitUc = '17', " & _

" HoraLeitUc = '000000', " & _

" NumEpgExecLeitUc = 0, " & _

" IndcAltdadosLeitUc = '0' WHERE " & _

" CodIrreg1LeitUc ='00' AND " & _

" CodIrreg2LeitUc ='00' AND " & _

" IndcAltdadosLeitUc ='0' AND " & _

" DtFatHdl = " & Chr(39) & MesfatBanco(MesFat) & Chr(39) & " AND" & _

" CodLocalHdl = " & Texto39 & " AND " & _

" NumRotaHdl = " & Texto41 & " AND " & _

" IndicForfaitEqp <>'1' AND " & _

" CodSitLeitProd ='0'"

 

 

cn2.Execute (sql2)

cn2.CommitTrans

 

End If

cn2.BeginTrans

sql2 = " UPDATE Tbl_Cronogramas SET " & _

" ANALISE = 'S' " & _

" WHERE DT_FAT = " & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & " AND" & _

" LOCAL = " & Texto39.Text & " AND " & _

" ROTA = " & Texto41.Text

cn2.Execute (sql2)

cn2.CommitTrans

cn2.Close

Set cn2 = Nothing

Seleção87.Value = 1

Seleção87.Enabled = True

DataGrid1.Visible = True

 

 

sql3 = " SELECT NumContaUC, LeitAntProd, LeitGrandProd, CodIrreg1LeitUc, CodIrreg2LeitUc, ValConstEqp, kWhMes, Media03, Variacao, DataLmr, Lote, SeqLote, " & _

" NumEpgExecLeitUc, DTLeitUc, CodRegHdl, DtFatHdl, CodLocalHdl, NumDuHdl, NumRotaHdl, NumLivroHdl, DtLeitPrevHdl, QteRegUcHdl, " & _

" QteRegEopHdl, QteregProdHdl, QteRegProdForfaitHdl, CodRegUC, NomeCLI, NumUc, EndUC, CodFatUc, TipoSitUc, CodObs1Uc, CodObs2Uc, " & _

" CodObs3Uc, CodRegEqp, NumUcEqp, NioEqp, NplEqp, TipoEqp, IndicForfaitEqp, CodRegProd, NumUcProd, CodProd, CodGrupoProd, CodSubgrProd, " & _

" CodFunMedProd, DescPerDiaProd, LeitMinprod, LeitMaxProd, CodSitLeitProd, QtdeMesesMediaProd, HistGrandMed1Prod, HistGrandMed2Prod, " & _

" HistGrandMed3Prod, HoraLeitUc, IndcAltdadosLeitUc, Origem, DescObs, RotaFat, PDM1, PDM2, PM1, PM2, PC1, PC2, PD1, PD2, PU1, PU2, TotUcRota, " & _

" RetornoLMR , EmiCalRural, RegEmpIncl, DataInclLeit, Faixa, LeitCopel " & _

" From Tbl_Leituras " & _

" WHERE TipoSitUc <> " & Chr(39) & 0 & Chr(39) & " AND " & _

" CodFunMedProd = 991 AND DtFatHdl =" & Chr(39) & MesfatBanco(MesFat.Text) & Chr(39) & " AND CodLocalHdl= " & Texto39.Text & " AND " & _

" NumRotaHdl=" & Texto41.Text & " ORDER BY NumContaUC"

 

Adodc1.CursorLocation = adUseClient

Adodc1.RecordSource = sql3 '====== É NESTE PONTO QUE PASSO A SQL PARA PREENCHER O DATAGRID =======

Adodc1.Refresh

 

Else

MsgBox "Não foi possível encontrar o local/rota em questão.", vbOKOnly, "Erro"

End If

End If

 

TrataErro:

MousePointer = 0

 

End Sub

 

 

Mais uma vez, agradeço a ajuda de todos. Eu estou quase igual ao carinha batendo a cabeça no computador que o Claudio Neto colocou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou dando uma olhada no código para ver se acho alguma coisa.

Mas reparei que você tem um tratamento de erro no código, e que esse tratamento não faz nada, não dá mensagem nenhuma.

 

Talvez esteja ocorrendo um erro, mas por causa do seu tratamento, você não consegue saber qual é.

 

Faça o seguinte, após o seu TrataErro:, ponha isso:

msgbox "Erro ocorrido: " & err.description, vb, "N° " & Err.number
E depois poste aqui o que diz o erro.

 

Ah, e você está utilizando conexão via código e conexão via objeto tudo junto? Isso não é necessário, porque me parece que tem 3 adodc's em seu projeto. Utilize tudo via código, é melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto:

 

Pus a msgbox para verificar o número do erro, mas, conforme já desconfiava, não há erro nenhum. Ele não traz mensagem nenhuma. Fiz esta verificação tanto na máquina servidor quanto na cliente.

Sua sugestão de deixar toda a conexão via código é muito boa, mas só tenho uma dúvida. Eu tiraria fora do form os adodc's e criaria-os em tempo de execução como recordset's normalmente, é isto? E isto me possibilitaria realizar alterações nos dados através do datagrid mesmo assim?

Podem parecer dúvidas idiotas, mas eu realmente não sou dos mais seguros em programação com vb.

 

 

Agradeço muito a sua ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto:

 

 

Consegui resolver o problema! :D

O negócio é o seguinte: criei um novo projeto e coloquei o datagrid a ser preenchido em tempo de execução, conforme sua sugestão, com uma sql de uma tabela qualquer do meu Banco. Aí sim ele retornou uma mensagem de erro dizendo que não podia inicializar o biding. Pesquisei na NET e percebi que poderia/deveria ser erro na seguinte dll:

 

MSBIND.DLL

 

Usei a ferramente do visual studio "package and development wizard" para evitar ao máximo erros com dll's e ocx's e funcionou perfeitamente!!!

 

Cara... MUITO OBRIGADO MESMO por sua ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa, fico feliz em ver que conseguiu resolver, porque te confesso que eu já estava ficando sem idéias do que poderia fazer, rs...

 

Meus parabéns, precisando, posta ai que no que for possível, a gente ajuda.

 

Abraços e bem vindo ao fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.