SQL

IGNORANTE 30/04/2005 17:34:18
#81137
Tenho a seguinte linha:

Adodc1.RecordSource = "Select * From Tabela1 Where Nome1 Like '" & Combo1.Text & "'"

e quero fazer um ciclo

For n=1 to 18
aqui fica a mesma linha, mas em vez de Nome1, deverá ser sucessivamente Nome1, Nome2, ... Nome18
next n

Alguém me pode ajudar? A sintaxe que eu tenho tentado ou dá erro ou não resulta, mas suponho que é possível.

Obrigado
TIAGOBRAIT 30/04/2005 17:55:44
#81144
Tenta assim:

[txt-color=#000080]Dim[/txt-color]n[txt-color=#000080]as Byte[/txt-color]
[txt-color=#000080]For[/txt-color]n = 1 [txt-color=#000080]to[/txt-color] 18
Adodc1.RecordSource = "Select * From Tabela1 Where Nome" & n & " Like '" & Combo1.Text & "'"

Não deu pra testar pq to sem VB aqui. Mas acho q funciona sim
TIAGOBRAIT 30/04/2005 17:59:15
#81145
Hehe, hj eu briguei com as tags de formatação...

[txt-color=#000080]Dim[/txt-color] n as Byte
[txt-color=#000080]For[/txt-color] n = 1 [txt-color=#000080]to[/txt-color] 18
Adodc1.RecordSource = "Select * From Tabela1 Where Nome" & n & " Like '" & Combo1.Text & "'"

IGNORANTE 30/04/2005 18:36:43
#81161
Olá Montito

A coisa é um bocado mais complicada do que eu expliquei.
Eu tenho 18 campos em cada ficha (Nome1, Nome2, ... Nome18), para além de outros.
Com um Combo, é escolhido um dos nomes que pode estar em qualquer uma das 18 posições de qualquer das fichas. Essa parte do combo está feita e mostra os nomes sem repetições.

Eu quero que o Datagrid mostre apenas as fichas que contenham o nome escolhido. O código agora está assim:

Dim m As Integer
Dim n As Byte
For m = 1 To Adodc1.Recordset.RecordCount
For n = 1 To 18
Adodc1.RecordSource = "Select * From Tabela1 Where Nome" & n & " Like '" & Combo1.Text & "'"
Next n
Next m
Adodc1.CommandType = adCmdUnknown
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh

mas não funciona. No Adodc1.Refresh dá o erro "Não foi fornecido nenhum valor para um ou mais parà¢metros necessários".
Tirando o Adodc1.Refresh, não funciona.

Pode ajudar-me?
E em vez de Dim n As Byte, não será Integer?
USUARIO.EXCLUIDOS 01/05/2005 01:39:57
#81199
Resposta escolhida
do jeito que esta o codigo sempre que chegar na linha set datagrid1..... o recordsource será sempre o 18, pois vc sempre le do 1 ao 18 e só depois sai do loop....

vc pode escrever o comando SQL de duas maneiras, usando IN ou usando OR
pelo que entendi vc tem 18 campos e precisar localizar o nome solicitado em um dos 18 certo?
se for isso mesmo a instrucao ficara assim:

ADODC1.RECORDSOURCE = "SELECT * FROM TABELA1 WHERE NOME1=' " & COMBO1 & " ' OR NOME2 = ' " & COMBO1 & " ' OR NOME3 = ' " & COMBO1........
ATE O CAMPO 18.

NAO PRECISA DE FOR NEXT.... O SQL SOZINHO FARA A PESQUISA NOS CAMPOS...

quando sua ultima pergunta de usar integer no lugar de byte o melhor mesmo é usar byte, consome menos memoria.
quanto vc define uma variavel como byte seu valor estará entre 0 e 255 e quando vc define como integer seu valor estará entre -32765 e +32765 ( se o valor não for este é bem proximo 32 mil e uns quebrados )

entao, sabendo que o for next vai do 1 ao 18, apenas 1 byte resolve.

sds,
IGNORANTE 01/05/2005 07:08:00
#81204
VSALAZAR

A sua ajuda é a que eu preciso, mas sou mesmo muito ignorante e não percebo nada de SQL.
Tentei passar a linha e dá-me erro de sintaxe. Tentei corrigir e diz-me que não foi fornecido o valor de um ou mais parà¢metros.
Devo ser eu que termino mal a linha de comando.

vc importa-se de escrever a linha outra vez, com o final, porque deve ser falta de "'" ou "".
Basta terminar em três, não é preciso as 18.

Obrigado

IGNORANTE 01/05/2005 14:21:20
#81224
Olha, já consegui resolver.
Vou encerrar o tópico.
Obrigado.
Tópico encerrado , respostas não são mais permitidas