Ir para conteúdo

POWERED BY:

Arquivado

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

#Aragorn#

Vetores bidimensionais

Recommended Posts

O código abaixo não é meu, apenas sei que o autor é JLVInputs: String to search, delimiter string, optional replacement limit (default = -1 .. ALL) optional string compare value (default vbBinaryCompare) Outputs: Array containing items found in the string based on the delimiter provided Created By: JLV 09/05/01 Last Revised: JLV 09/05/01Duplicates the functionality of the VB 6 SPLIT function., mas lá vai o código:DeNise

<%@language = Vbscript%><% option explicit %><%Function Quebra( texto, maximo )dim i, retorno, matrizmatriz = split( texto, " " )retorno = ""for i = 0 to uBound( matriz )do while len( matriz(i) ) > maximoretorno = retorno & left( matriz( i ), maximo ) & " "matriz( i ) = mid( matriz( i ), maximo + 1 )loopretorno = retorno & matriz( i ) & " "nextQuebra = trim( retorno )end functionFunction ordenar( matriz ) dim i, j, aux1, aux2 For i = 0 To UBound(matriz) For j = 0 To UBound(matriz) If( matriz(i,1) < matriz(j,1) ) Then aux1 = matriz(j,1) aux2 = matriz(j,2) matriz(j,1) = matriz(i,1) matriz(j,2) = matriz(i,2)matriz(i,1) = aux1 matriz(i,2) = aux2 End If Next Next response.write "<BR>Matriz em ordem decrescente<br>" For i = UBound(matriz) To 0 step -1 'MOSTRA A MATRIZ EM ORDEM DECRESCENTE DA COLUNA 1 response.write "<br>Coluna 1: " & matriz(i,1) & "Coluna 2: " & matriz(i,2) next response.write "<BR>Matriz em ordem crescente<br>" For i = 0 To UBound(matriz) 'MOSTRA A MATRIZ EM ORDEM CRESCENTE DA COLUNA 1 response.write "<br>Coluna 1: " & matriz(i,1) & "Coluna 2: " & matriz(i,2) nextEnd Function Function Criterio(Campo As String, Matriz As Variant, _Optional Conector As String) As String'Cria um string de critério com base numa matrizDim strCriterio As StringDim i As VariantIf Conector = "" Then Conector = "AND"If IsNull(Matriz) = True Then'Se for nula a matrizstrCriterio = Campo & " LIKE '*'"ElseFor i = 0 To UBound(Matriz)strCriterio = strCriterio & " " & Campo & " LIKE '*" & _Matriz(i) & "*' " & ConectorNext i'Retira o último conectorstrCriterio = Left$(strCriterio, Len(strCriterio) - _Len(Conector))End IfCriterio = strCriterioEnd Function

Os parâmetros da função são:Campo: nome do campo em que será feita a pesquisa.Matriz: é um array com os critérios da pesquisa (explicarei adiante comocriar).Conector: AND ou OR, se não colocar nenhum ele assume AND.Para criar a matriz, pode ser usada a função Split (Accoss2000 ou superior).Ex:Dim varMatriz As VariantTeuCampo="abc;def;ghi;jkl"varMatriz = Split(TeuCampo, ";")A matriz ficaria assim:abcdefghijklO segundo argumento da função Split contém o string que separa osargumentos, pode ser uma vírgula, um espaço, um ponto-e-vírgula, etc.Para quem usa Access97, pode usar uma função personalizada para "imitar" aSplit. Eu coloquei uma no final do e-mail para quem quiser.Exemplo de como usar as funções acima para abrir um relatório com critériosseparados por um espaço simples:

Dim stDocName As StringDim strFiltro As StringDim varFiltro As VariantstrFiltro = InputBox("Digite o nome (ou parte " & _"do nome) dos fornecedores. Para mostrar todos, " & _"digite *", "Informe os fornecedores")If strFiltro = "" Then Exit SubvarFiltro = IIf(strFiltro = "*", Null, _Split(strFiltro, " "))strFiltro = Criterio("NomeFantasia", varFiltro, "OR")stDocName = "rptStatusPgCompras"DoCmd.OpenReport stDocName, acViewPreview, , strFiltro

Para abrir formulários ou Recordsets filtrados, é só seguir a mesma lógica.Exemplo (que usei no BD do cliente):

Private Sub Pesquisa_Click()Dim varArray As Variant'Filtra o form de acordo com os critérios digitadosIf IsNull(Texto2) ThenvarArray = NullElsevarArray = Split(Texto2)End If'Altera a origem do formulário filtrando os'registros conforme os critérios digitadosMe.RecordSource = "SELECT Agenda.Código, Agenda.Nome, " & _"Agenda.[Nome Fantasia], Agenda.Categoria, Agenda.[% de Desconto], " & _"Agenda.[Desconto Padrão], [Nome Fantasia] & ' - ' & [Nome] AS Nomes, " & _"CondPgto " & _"FROM Agenda WHERE Agenda.Ativo=-1 AND " & Criterio("[Nome Fantasia]",varArray)End Sub

Para quem não usa Access2000 ou XP, não tem a função Split. Para "enganar",pode colar a seguinte função em um módulo:

Public Function Split97(strToSplit As String, _Optional strDelimiter As String = " ", _Optional intCount As Integer = -1, _Optional intCompare As Integer = 0) As Variant

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.