quinta-feira, 21 de maio de 2009
segunda-feira, 11 de maio de 2009
Javascript - ordenar combo
Código não tão antigo, de 2006. Estava liderando um pequeno projeto de um site para uma seguradora.
function Reorganizar(objCombo)
{
//07-Mai-2006 - Thiago França
var iQtdeItens = objCombo.length;
if (iQtdeItens > 0)
{
var i;
var x;
arrItens = new Array(iQtdeItens);
arrTemp = new Array(1)
arrTemp[0] = new Array(1)
//armazenar os valores em array
for (i=0;i<=iQtdeItens-1;i++)
{
arrItens[i] = new Array(1);
arrItens[i][0] = objCombo.options[i].value;
arrItens[i][1] = objCombo.options[i].text;
}
//remover ítens e ordenar array
for (i=0;i<=iQtdeItens-1;i++)
{
objCombo.options[i] = null;
}
for (x=i+1;x<=iQtdeItens-1;x++)
{
if (arrItens[i][0] > arrItens[x][0])
{
arrTemp[0][0] = arrItens[x][0];
arrTemp[0][1] = arrItens[x][1];
arrItens[x][0] = arrItens[i][0];
arrItens[x][1] = arrItens[i][1];
arrItens[i][0] = arrTemp[0][0];
arrItens[i][1] = arrTemp[0][1];
}
}
//inserir ítens no controle
for (i=0;i<=iQtdeItens-1;i++)
{
objCombo.options[i] = new Option(arrItens[i][1], arrItens[i][0]);
}
}
}
Esse código recebe um objeto HTML SELECT (combo) e ordena os ítens.
function Reorganizar(objCombo)
{
//07-Mai-2006 - Thiago França
var iQtdeItens = objCombo.length;
if (iQtdeItens > 0)
{
var i;
var x;
arrItens = new Array(iQtdeItens);
arrTemp = new Array(1)
arrTemp[0] = new Array(1)
//armazenar os valores em array
for (i=0;i<=iQtdeItens-1;i++)
{
arrItens[i] = new Array(1);
arrItens[i][0] = objCombo.options[i].value;
arrItens[i][1] = objCombo.options[i].text;
}
//remover ítens e ordenar array
for (i=0;i<=iQtdeItens-1;i++)
{
objCombo.options[i] = null;
}
for (x=i+1;x<=iQtdeItens-1;x++)
{
if (arrItens[i][0] > arrItens[x][0])
{
arrTemp[0][0] = arrItens[x][0];
arrTemp[0][1] = arrItens[x][1];
arrItens[x][0] = arrItens[i][0];
arrItens[x][1] = arrItens[i][1];
arrItens[i][0] = arrTemp[0][0];
arrItens[i][1] = arrTemp[0][1];
}
}
//inserir ítens no controle
for (i=0;i<=iQtdeItens-1;i++)
{
objCombo.options[i] = new Option(arrItens[i][1], arrItens[i][0]);
}
}
}
Esse código recebe um objeto HTML SELECT (combo) e ordena os ítens.
Visual Basic com ADOX - Retornando tabelas, campos e propriedades de um MDB e gravando em um arquivo texto
Essa eu fiz quando trabalhava em um banco, desenvolvendo softwares e ferramentas. Em 1 hora fui programando, reprogramando e cheguei a esse pequeno mas útil código:
Option Explicit
'*************************************************************
'* Faz a leitura de todas as tabelas, colunas e propriedades *
'* e grava em um arquivo texto, utilizando ADOX *
'* Out/2002 - Thiago França *
'*************************************************************
Sub Main()
Dim catNovo As ADOX.Catalog
Dim intNF As Integer 'Número de arquivo disponível para uso
Dim blnOpen As Boolean 'Flag - se arquivo aberto, true
Dim intTable As Long
Dim intColumn As Long
Dim objTabela As Object
Dim strColunas As String
On Error GoTo Erros
Set catNovo = New ADOX.Catalog
catNovo.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\It\db\dbweb.mdb"
intNF = FreeFile()
Open "c:\bd.txt" For Output As #intNF
blnOpen = True
For Each objTabela In catNovo.Tables
If TypeOf objTabela Is ADOX.Table Then
For intTable = 0 To catNovo.Tables.Count - 1
Print #intNF, catNovo.Tables.Item(intTable).Name
Print #intNF, "Campo" & Space$(15) & "Tipo" & vbTab & "Tam." & vbTab & "Prec." & vbTab & "Auto Incr." & vbTab & "Padrao" & vbTab & "Descrição" & vbTab & "Nulo" & vbTab & "Compr.Zero"
For intColumn = 0 To catNovo.Tables.Item(intTable).Columns.Count - 1
strColunas = catNovo.Tables.Item(intTable).Columns(intColumn).Name
strColunas = strColunas & Space$(30 - Len(strColunas)) & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Type) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).DefinedSize) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Precision) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Autoincrement").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Default").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Description").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Nullable").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Jet OLEDB:Allow Zero Length").Value)
Print #intNF, strColunas
Next intColumn
Next intTable
End If
Next
Close #intNF
blnOpen = False
Set objTabela = Nothing
Set catNovo = Nothing
Exit Sub
Erros:
Set objTabela = Nothing
Set catNovo = Nothing
If blnOpen Then
Close #intNF
End If
MsgBox "Erro no processamento - " & CStr(Err.Number) & "-" & Err.Description, vbOKOnly + vbCritical, "Erro!"
End Sub
Detalhes:
- Nunca se esquecer, após instanciar objetos, destruí-los. Lembrar também de destruir na rotina de tratamento de erros.
- A variável blnOpen é um boolean para controlar o momento da abertura do arquivo. Caso ocorra um erro de run-time, e a variável blnOpen estiver setada como True, o arquivo será fechado.
- Programadores VB geralmente desconhecem o uso da função FreeFile(), e utilizam literais para abertura de arquivos.
- O código não está identado devido às configurações do blogger !
Option Explicit
'*************************************************************
'* Faz a leitura de todas as tabelas, colunas e propriedades *
'* e grava em um arquivo texto, utilizando ADOX *
'* Out/2002 - Thiago França *
'*************************************************************
Sub Main()
Dim catNovo As ADOX.Catalog
Dim intNF As Integer 'Número de arquivo disponível para uso
Dim blnOpen As Boolean 'Flag - se arquivo aberto, true
Dim intTable As Long
Dim intColumn As Long
Dim objTabela As Object
Dim strColunas As String
On Error GoTo Erros
Set catNovo = New ADOX.Catalog
catNovo.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=D:\It\db\dbweb.mdb"
intNF = FreeFile()
Open "c:\bd.txt" For Output As #intNF
blnOpen = True
For Each objTabela In catNovo.Tables
If TypeOf objTabela Is ADOX.Table Then
For intTable = 0 To catNovo.Tables.Count - 1
Print #intNF, catNovo.Tables.Item(intTable).Name
Print #intNF, "Campo" & Space$(15) & "Tipo" & vbTab & "Tam." & vbTab & "Prec." & vbTab & "Auto Incr." & vbTab & "Padrao" & vbTab & "Descrição" & vbTab & "Nulo" & vbTab & "Compr.Zero"
For intColumn = 0 To catNovo.Tables.Item(intTable).Columns.Count - 1
strColunas = catNovo.Tables.Item(intTable).Columns(intColumn).Name
strColunas = strColunas & Space$(30 - Len(strColunas)) & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Type) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).DefinedSize) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Precision) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Autoincrement").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Default").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Description").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Nullable").Value) & vbTab & _
CStr(catNovo.Tables.Item(intTable).Columns(intColumn).Properties("Jet OLEDB:Allow Zero Length").Value)
Print #intNF, strColunas
Next intColumn
Next intTable
End If
Next
Close #intNF
blnOpen = False
Set objTabela = Nothing
Set catNovo = Nothing
Exit Sub
Erros:
Set objTabela = Nothing
Set catNovo = Nothing
If blnOpen Then
Close #intNF
End If
MsgBox "Erro no processamento - " & CStr(Err.Number) & "-" & Err.Description, vbOKOnly + vbCritical, "Erro!"
End Sub
Detalhes:
- Nunca se esquecer, após instanciar objetos, destruí-los. Lembrar também de destruir na rotina de tratamento de erros.
- A variável blnOpen é um boolean para controlar o momento da abertura do arquivo. Caso ocorra um erro de run-time, e a variável blnOpen estiver setada como True, o arquivo será fechado.
- Programadores VB geralmente desconhecem o uso da função FreeFile(), e utilizam literais para abertura de arquivos.
- O código não está identado devido às configurações do blogger !
Turbo Basic
Estava vendo uns códigos antigos, e vou postar esse que fiz em 1995 num PC-XT monitor fósforo verde, no Turbo Basic. Nessa época eu fazia eletrônica no Senai e ouvia heavy metal diariamente. Esse programa desenha o logo do Iron Maiden.
5 REM
10 REM ***********************
15 REM * *
20 REM * THIAGO FRANÇA *
30 REM * SOFTWARE *
40 REM * DATA: 18/01/95 *
45 REM * *
50 REM ***********************
55 REM
60 KEY OFF:CLS:SCREEN 2
65 PSET(80,10):DRAW"D50 R20 U50 L20"
70 PSET(110,10):DRAW"D50 R20 U10 F25 E10 H20 E15 H20 G10 U10 L20"
75 PSET(134,30):DRAW"G7 R15 H7"
80 PSET(200,10):DRAW"G42 F10 R65 E10 H42"
85 PSET(202,30):DRAW"G20 R40 H20"
90 PSET(240,10):DRAW"F10 D40 R20 U30 F15 D20 F17 U72 L20 D15 H15 L27"
95 PSET(80,85):DRAW"F10 D40 R20 U35 F10 E10 D40 F17 U58 H15 G10 H9 L32"
100 PSET(215,85):DRAW"L20 G18 H10 G10 F10 G13 F10 E15 F15 R25 U51 L3"
105 PSET(200,98):DRAW"G10 F10 U20"
110 PSET(230,85):DRAW"D50 R20 U50 L20"
115 PSET(260,85):DRAW"D50 R50 E15 H35 L30"
120 PSET(278,95):DRAW"D30 R30 H30"
125 PSET(330,85):DRAW"D40 F10 R40 U10 L30 U10 R30 U10 L30 U10 R30 U10 L50"
130 PSET(390,85):DRAW"F10 D40 R20 U30 F15 D20 F17 U72 L20 D15 H15 L27"
5 REM
10 REM ***********************
15 REM * *
20 REM * THIAGO FRANÇA *
30 REM * SOFTWARE *
40 REM * DATA: 18/01/95 *
45 REM * *
50 REM ***********************
55 REM
60 KEY OFF:CLS:SCREEN 2
65 PSET(80,10):DRAW"D50 R20 U50 L20"
70 PSET(110,10):DRAW"D50 R20 U10 F25 E10 H20 E15 H20 G10 U10 L20"
75 PSET(134,30):DRAW"G7 R15 H7"
80 PSET(200,10):DRAW"G42 F10 R65 E10 H42"
85 PSET(202,30):DRAW"G20 R40 H20"
90 PSET(240,10):DRAW"F10 D40 R20 U30 F15 D20 F17 U72 L20 D15 H15 L27"
95 PSET(80,85):DRAW"F10 D40 R20 U35 F10 E10 D40 F17 U58 H15 G10 H9 L32"
100 PSET(215,85):DRAW"L20 G18 H10 G10 F10 G13 F10 E15 F15 R25 U51 L3"
105 PSET(200,98):DRAW"G10 F10 U20"
110 PSET(230,85):DRAW"D50 R20 U50 L20"
115 PSET(260,85):DRAW"D50 R50 E15 H35 L30"
120 PSET(278,95):DRAW"D30 R30 H30"
125 PSET(330,85):DRAW"D40 F10 R40 U10 L30 U10 R30 U10 L30 U10 R30 U10 L50"
130 PSET(390,85):DRAW"F10 D40 R20 U30 F15 D20 F17 U72 L20 D15 H15 L27"