AJUDA NA PESQUISA SQL
Estou usando o seguinte código
Set cnn = CreateObject([Ô]ADODB.Connection[Ô])
cnn.Open [Ô]DRIVER={MySQL ODBC 3.51 Driver};SERVER =[Ô] + xabase + [Ô];DATABASE=escola;UID=eli;PWD=eli123;OPTION=16427[Ô]
Set rs = CreateObject([Ô]ADODB.RecordSet[Ô])
Set rs.ActiveConnection = cnn
stropen = [Ô]SELECT count(idalmoco) AS total1, sum(preco) AS total2, sum(multa) AS total3, sum(multa + preco) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao From almoco INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso WHERE alunos.turma = [ô][Ô] + Text1.Text + [Ô][ô] GROUP BY almoco.nrprocesso ASC[Ô]
rs.Open stropen, cnn
.DrawText 9.7, n, [Ô]Senhas Marcadas[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 12.6, n, [Ô]Preço[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 13.7, n, [Ô]V. Multa[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 15.8, n, [Ô]Total[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 17.5, n, [Ô]Escalão[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
n = n - 0.5
fimciclo:
If rs.EOF Or rs.BOF Then
rs.Close
GoTo salta
Else
nome = StrConv(rs.Fields([Ô]nome[Ô]), vbProperCase)
escalao = rs.Fields([Ô]escalao[Ô])
nrprocesso = rs.Fields([Ô]nrprocesso[Ô])
total1 = rs.Fields([Ô]total1[Ô])
total2 = Format(rs.Fields([Ô]total2[Ô]), [Ô]0.00 €[Ô])
total3 = Format(rs.Fields([Ô]total3[Ô]), [Ô]0.00 €[Ô])
total4 = Format(rs.Fields([Ô]total4[Ô]), [Ô]0.00 €[Ô])
prere2 = nrprocesso + [Ô] - [Ô] + nome + [Ô][Ô]
.DrawText 1, n, prere2, [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 11, n, total1, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 13.2, n, total2, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 14.8, n, total3, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 16.5, n, total4, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 18.1, n, escalao, [Ô]Fnt1[Ô], 12, pdfAlignRight
n = n - 0.5
rs.MoveNext
End If
GoTo fimciclo
salta:
o problema é que cada vez que faço uma pesquisa o pc bloqueia durante 2-3 minutos, alguém sabe como contornar isto?
Set cnn = CreateObject([Ô]ADODB.Connection[Ô])
cnn.Open [Ô]DRIVER={MySQL ODBC 3.51 Driver};SERVER =[Ô] + xabase + [Ô];DATABASE=escola;UID=eli;PWD=eli123;OPTION=16427[Ô]
Set rs = CreateObject([Ô]ADODB.RecordSet[Ô])
Set rs.ActiveConnection = cnn
stropen = [Ô]SELECT count(idalmoco) AS total1, sum(preco) AS total2, sum(multa) AS total3, sum(multa + preco) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao From almoco INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso WHERE alunos.turma = [ô][Ô] + Text1.Text + [Ô][ô] GROUP BY almoco.nrprocesso ASC[Ô]
rs.Open stropen, cnn
.DrawText 9.7, n, [Ô]Senhas Marcadas[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 12.6, n, [Ô]Preço[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 13.7, n, [Ô]V. Multa[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 15.8, n, [Ô]Total[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 17.5, n, [Ô]Escalão[Ô], [Ô]Fnt1[Ô], 12, pdfAlignLeft
n = n - 0.5
fimciclo:
If rs.EOF Or rs.BOF Then
rs.Close
GoTo salta
Else
nome = StrConv(rs.Fields([Ô]nome[Ô]), vbProperCase)
escalao = rs.Fields([Ô]escalao[Ô])
nrprocesso = rs.Fields([Ô]nrprocesso[Ô])
total1 = rs.Fields([Ô]total1[Ô])
total2 = Format(rs.Fields([Ô]total2[Ô]), [Ô]0.00 €[Ô])
total3 = Format(rs.Fields([Ô]total3[Ô]), [Ô]0.00 €[Ô])
total4 = Format(rs.Fields([Ô]total4[Ô]), [Ô]0.00 €[Ô])
prere2 = nrprocesso + [Ô] - [Ô] + nome + [Ô][Ô]
.DrawText 1, n, prere2, [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 11, n, total1, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 13.2, n, total2, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 14.8, n, total3, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 16.5, n, total4, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 18.1, n, escalao, [Ô]Fnt1[Ô], 12, pdfAlignRight
n = n - 0.5
rs.MoveNext
End If
GoTo fimciclo
salta:
o problema é que cada vez que faço uma pesquisa o pc bloqueia durante 2-3 minutos, alguém sabe como contornar isto?
Oque seria: [Ô] .DrawText [Ô]
Acho que esta faltando o comando With para este parâmetro.
Diz ai, demora mas retorna o resultado?
Se tem erro, qual a msg?
Acho que esta faltando o comando With para este parâmetro.
Diz ai, demora mas retorna o resultado?
Se tem erro, qual a msg?
eu acredito que o problema esteja no uso do goto, pois isto é algo meio grotesco para tal consulta tente um do while que talvez agilize um pouco mais as coisas, veja:
tente esta alteração
If Not (rs.EOF and rs.BOF) Then
Do While Not rs.EOF
nome = StrConv(rs.Fields([Ô]nome[Ô]), vbProperCase)
escalao = rs.Fields([Ô]escalao[Ô])
nrprocesso = rs.Fields([Ô]nrprocesso[Ô])
total1 = rs.Fields([Ô]total1[Ô])
total2 = Format(rs.Fields([Ô]total2[Ô]), [Ô]0.00 €[Ô])
total3 = Format(rs.Fields([Ô]total3[Ô]), [Ô]0.00 €[Ô])
total4 = Format(rs.Fields([Ô]total4[Ô]), [Ô]0.00 €[Ô])
prere2 = nrprocesso + [Ô] - [Ô] + nome + [Ô][Ô]
.DrawText 1, n, prere2, [Ô]Fnt1[Ô], 12, pdfAlignLeft
.DrawText 11, n, total1, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 13.2, n, total2, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 14.8, n, total3, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 16.5, n, total4, [Ô]Fnt1[Ô], 12, pdfAlignRight
.DrawText 18.1, n, escalao, [Ô]Fnt1[Ô], 12, pdfAlignRight
n = n - 0.5
rs.MoveNext
Loop
end if
tente esta alteração
já experimentei mas continua a demora o mesmo tempo.
Os dados são devolvidos correctamente, mas com muito tempo de espera.
Os dados são devolvidos correctamente, mas com muito tempo de espera.
então vamos lá que componente é este que possui a propriedade Drawtext?
Drawtext é para escrever num ficheiro pdf, ou seja gera um relatório em pdf
já fiz mais um teste. Desta vez executei no mysql e o resultado foi o seguinte
Mostrando registos 0 - 26 (27 total, O Query demorou 57.5900 sec)Comando SQL:
SELECT COUNT( idalmoco ) AS total1, SUM( preco ) AS total2, SUM( multa ) AS total3, SUM( multa + preco ) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao
FROM almoco
INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso
WHERE alunos.turma = [ô]7A[ô]
GROUP BY almoco.nrprocesso ASC
LIMIT 0 , 30
total1 total2 total3 total4 nrprocesso nome escalao
43 0.00 0 0.00 8113 MIGUEL ALEXANDRE R ASCENSO A
61 89.06 0 89.06 8136 RAFAEL FERREIRA GAUDÊNCIO C
27 39.42 0 39.42 8440 Ana Maria R Duque C
23 33.58 0 33.58 8441 Beatriz Isabel S Lopes C
57 segundos a executar este comando, o que tem de mal este comando? alguém sabe
Mostrando registos 0 - 26 (27 total, O Query demorou 57.5900 sec)Comando SQL:
SELECT COUNT( idalmoco ) AS total1, SUM( preco ) AS total2, SUM( multa ) AS total3, SUM( multa + preco ) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao
FROM almoco
INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso
WHERE alunos.turma = [ô]7A[ô]
GROUP BY almoco.nrprocesso ASC
LIMIT 0 , 30
total1 total2 total3 total4 nrprocesso nome escalao
43 0.00 0 0.00 8113 MIGUEL ALEXANDRE R ASCENSO A
61 89.06 0 89.06 8136 RAFAEL FERREIRA GAUDÊNCIO C
27 39.42 0 39.42 8440 Ana Maria R Duque C
23 33.58 0 33.58 8441 Beatriz Isabel S Lopes C
57 segundos a executar este comando, o que tem de mal este comando? alguém sabe
tem muitos registros na tabela?
fora alguns pequenos detalhes que as vezes fazem a diferença o processo de criação do pdf é que está reduzindo o desempenho.
exemplo para ver se a query melhora
SELECT COUNT( [txt-color=#0000f0]almoco[/txt-color].idalmoco ) AS total1, SUM( [txt-color=#0000f0]almoco[/txt-color].preco ) AS total2, SUM( [txt-color=#0000f0]almoco[/txt-color].multa ) AS total3, SUM( [txt-color=#0000f0]almoco[/txt-color].multa + [txt-color=#0000f0]almoco[/txt-color].preco ) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao
FROM almoco
INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso
WHERE alunos.turma = [ô]7A[ô]
GROUP BY almoco.nrprocesso ASC
LIMIT 0 , 30
e você pode testar lançando os dados em um list para ver se o problema é realmente o tempo para se gerar o pdf.
exemplo para ver se a query melhora
SELECT COUNT( [txt-color=#0000f0]almoco[/txt-color].idalmoco ) AS total1, SUM( [txt-color=#0000f0]almoco[/txt-color].preco ) AS total2, SUM( [txt-color=#0000f0]almoco[/txt-color].multa ) AS total3, SUM( [txt-color=#0000f0]almoco[/txt-color].multa + [txt-color=#0000f0]almoco[/txt-color].preco ) AS total4, almoco.nrprocesso, alunos.nome, alunos.escalao
FROM almoco
INNER JOIN alunos ON almoco.nrprocesso = alunos.nrprocesso
WHERE alunos.turma = [ô]7A[ô]
GROUP BY almoco.nrprocesso ASC
LIMIT 0 , 30
e você pode testar lançando os dados em um list para ver se o problema é realmente o tempo para se gerar o pdf.
agradeço a todos novamente. Resolvi o problema, actualizei o mysql :-)
Tópico encerrado , respostas não são mais permitidas