Exemplo com fontes de como criar cruds no VB.
Programação
VB – Buscando o espaço livre no disco
Exemplo prático com fontes..
VB – Acessando base de dados DBF
Exemplo prático de como acessar base de dados DBF com VB.
ASP – Acessando sua base de dados via OBDC
'Microsoft SQL Server ODBC Driver example
cnstr = "driver={SQL Server};server=myserver;" & _
"database=pubs;uid=sa;pwd="
cn.Connect = cnstr
'Microsoft Access ODBC Driver example (version 2.x)
cnstr = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=c:\program files\devstudio\vb\biblio.mdb;" & _
"Uid=Admin; Pwd="
cn.Connect = cnstr
'Microsoft ODBC Driver for Oracle example
cnstr = "Driver={Microsoft ODBC Driver for Oracle};" & _
"Server=OracleServer.world; Uid=demo; Pwd=demo"
' Note that 1.0 version of the Microsoft Oracle driver used
' "ConnectString" notation instead of "Server"
NOTE: O nome do driver precisa estar entre {}, assim : “{SQL Server}”
ASP – Como abrir uma conexão com ADO
Existem três maneiras de abrir uma objeto conexão (Connection Object) usando a ADO:
Configurando a propriedade ConnectionString com uma Connect String válida e chamando o método Open(). Esta string de conexão depende de um provedor OLEDB.
Passando uma Connect String valida para o primeiro argumento do método Open()
Passando o OBDC DSN (Data Source Name) e opcionalmente a identificação e a senha para o objeto Connection via método Open()
Existem três maneiras de abrir um Objeto Recordset usando a ADO:
Abrindo um Recordset usando o método Execute(). Sem um objeto Connection.
Abrindo um Recordset usando o método Execute(). Sem um objeto Command.
Abrindo um objeto Recordset sem um objeto Connection ou Command e passando um string de conexão válida para o segundo argumento do Recordset. Usando o método Open().
Vejamos abaixo os exemplos:
Private Sub cmdOpen_Click()
Dim Conn1 As New adodb.Connection
Dim Cmd1 As New adodb.Command
Dim Errs1 As Errors
Dim Rs1 As New adodb.Recordset
Dim i As Integer
Dim AccessConnect As String
' Error Handling Variables
Dim errLoop As Error
Dim strTmp As String
AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=nwind.mdb;" & _
"DefaultDir=C:\vb6;" & _
"Uid=Admin;Pwd=;"
'---------------------------------------
' Métodos do Object Connection
'---------------------------------------
On Error GoTo AdoError ' Tratamento de erros
' Connection object
' Connection Open método 1 - Open via ConnectionString Property
Conn1.ConnectionString = AccessConnect
Conn1.Open
Conn1.Close
Conn1.ConnectionString = ""
' Connection Open metodo 2 - Open("[ODBC Connect String]","","")
Conn1.Open AccessConnect
Conn1.Close
' Connection Open metodo 3 - Open("DSN","Uid","Pwd")
Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
"DBQ=nwind.mdb;" & _
"DefaultDir=C:\program files\devstudio\vb;" & _
"Uid=Admin;Pwd=;"
Conn1.Close
'---------------------------------
' Métodos do Recordset Object
'---------------------------------
' Não assume que temos um connection object.
On Error GoTo AdoErrorLite
' Recordset Open Metodo 1 - Open via Connection.Execute(...)
Conn1.Open AccessConnect
Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
Rs1.Close
Conn1.Close
' Recordset Open Metodo 2 - Open via Command.Execute(...)
Conn1.ConnectionString = AccessConnect
Conn1.Open
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "SELECT * FROM Employees"
Set Rs1 = Cmd1.Execute
Rs1.Close
Conn1.Close
Conn1.ConnectionString = ""
' Recordset Open Metodo 3 - Open sem Connection & e sem Connect String
Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
Rs1.Close
Done:
Set Rs1 = Nothing
Set Cmd1 = Nothing
Set Conn1 = Nothing
Exit Sub
AdoError:
i = 1
On Error Resume Next
'numera a coleção erros e mostra as propriedades de cada objeto error
Set Errs1 = Conn1.Errors
For Each errLoop In Errs1
With errLoop
strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
strTmp = strTmp & vbCrLf & " Description " & .Description
strTmp = strTmp & vbCrLf & " Source " & .Source
i = i + 1
End With
Next
AdoErrorLite:
' Informação do objeto Error do VB
strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
strTmp = strTmp & vbCrLf & " Description " & Err.Description
MsgBox strTmp
' Encerra o tratamento de erros
On Error GoTo 0
GoTo Done
End Sub
DELPHI – Limpar spool de impressão (esvaziar spooler)
Function GetCurrentPrinterHandle: THandle;
Const
Defaults: TPrinterDefaults = (
pDatatype : nil;
pDevMode : nil;
DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER
);
Var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
Begin { GetCurrentPrinterHandle }
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
If not OpenPrinter(@Device, Result, @Defaults) Then
RaiseLastWin32Error;
End; { Pega o handle da impressora padrão }
{ mata todos os trabalhos da impressora }
Procedure PurgeJobsOnCurrentPrinter;
Var
hPrinter: THandle;
Begin
hPrinter:= GetCurrentPrinterHandle;
try
If not WinSpool.SetPrinter( hPrinter, 0, nil,
PRINTER_CONTROL_PURGE )
Then
RaiseLastWin32Error;
finally
ClosePrinter( hPrinter );
end;
End;
Chame utilizando a procedure, assim…
PurgeJobsOnCurrentPrinter;
DELPHI – Imprimindo “cupom” direto na impressora utilizando o objeto TPrinter
procedure Imprimir; var iPrinter: TPrinter; PrinterY: Integer; begin iPrinter:= TPrinter.Create; PrinterY:= 0; iPrinter.Title:= 'MEUSISTEMA - Cupom'; //Se a impressora estiver imprimindo, espera While Printer.Printing Do Sleep(100); iPrinter.BeginDoc; iPrinter.Canvas.Font.Name:='Courier'; iPrinter.Canvas.Font.Style:=[fsBold]; iPrinter.Canvas.Font.Size:=13; iPrinter.Canvas.Font.Size:=18; iPrinter.Canvas.TextOut(0,PrinterY,'CUPOM TESTE SISTEMA'); Inc(PrinterY,38); iPrinter.Canvas.Font.Size:=13; iPrinter.Canvas.TextOut(0,PrinterY,'TESTE'); Inc(PrinterY,30); iPrinter.Canvas.TextOut(0,PrinterY,'--------------------'); Inc(PrinterY,30); iPrinter.Canvas.Font.Size:= 18; iPrinter.Canvas.TextOut(0,PrinterY,'OUTRO TESTE'); Inc(PrinterY,50); iPrinter.EndDoc; iPrinter.Free;
Como acabar com o SPAM em formulários – Solução simples com HTML
É fato que muitos dos formulários, como de contato, cadastro, entre outros, são diariamente alvos de bots (robôs) pré-programados para espalharem SPAM pela internet. Uma vez que seu site esteja indexado nos buscadores, seu site se torna alvo fácil deste tipo de ataque, não se apavore, isso é algo corriqueiro de acontecer, com todo mundo.
Infelizmente, hoje, a solução adotada por grande maioria (e até por mim, até conhecer essa) era de incluir um captcha, mas os bots já conseguem interpretar as letras e números oriundos da imagem através de um processo de OCR, logo, dificultamos, colocando somas e divisões simples, o que resolveu o problema, mas acabou com a usabilidade.
Esta solução, encontrei no blog DA2K, já apliquei em um site pessoal, e realmente funcionou, pretendo começar a utilizar mais seguidamente dela, vou tornar a publicação um pouco mais didática do que a original e mostrar como a solução funciona como um todo.
Resumo
Na verdade, é muito simples: Trata-se de criar um campo no formulário em questão que seja invisível visualmente (NOTA: Você precisa utilizar um “alpha” ou “opacity” para isto, um campo do tipo “hidden” não irá funcionar), como esses bots trabalham processando somente o HTML e não o formulário visual, sempre preencherá este campo. No caso de uma pessoa, como o campo é invisível, essa pessoa não o preencherá. O outro lado da solução, se dá no backend (no processador da linguagem, seja PHP, ASP, ou o que for), basta que façamos a validação se este campo invisível foi preenchido ou não.
Origem
Segundo o autor da publicação original, ele percebeu esta solução na ferramenta MailChimp, e não é por menos, o pessoal de lá tem colaborado exponencialmente com a comunidade de desenvolvedores.
Explicando melhor
Como mencionei anteriormente, basta criarmos no nosso formulário um campo “fantasma” que não receberá nenhum valor (passará pela validação), quando um bot interpretar o HTML do formulário, tentará preencher todos os campos, inclusive este, desta forma, não passará pela nossa validação.
HTML:
<form method="post" ...>
...
<input type="text" id="txtInvisibleValidation" name="txtInvisibleValidation" style="display:block;width:1px;height:1px;border:0;padding:0px;background:transparent;" onfocus="document.getElementById('#txtName').focus();" />
...
</form>
A validação se dará no back-end por maior segurança (isso não quer dizer que você não possa tentar fazer no front), segue um exemplo escrito em PHP:
<?php
$nome = $_POST['txtName'];
$mail = $_POST['txtMail'];
$mensage = $_POST['txtMensage'];
$validation = $_POST['txtInvisibleValidation'];
if ($validation != '') { die('Error on validate form: you are human?!'); }
...
?>
Gostou?
Deixe seu comentário abaixo e me motive a escrever mais artigos. Se gostou muito, compartilhe.
DELPHI – Como aplicar atributos a um arquivo
Com esta dica, você pode aplicar o arquivo como somente leitura, ou então tornar o arquivo oculto.
function FileSetAttr(const FileName: string; Attr: Integer): Integer;
Exemplo:
FileSetAttr ('C:\logo.sys',0);
Onde Attr:Interger:
0=Sem Atributos;
1=Somente Leitura;
2=Oculto;
3=Somente Leitura e Oculto;
4=Sistema;
5=Somente Leitura e Sistema;
6=Sistema e Oculto;
7=Somente Leitura,Sistema e Oculto;
DELPHI – Copiar arquivos usando a ShellApi do Windows
function ProcessArquivo(const Origem, Destino : string; Operacao, Modo:Integer) : Boolean; // Requer a unit ShellApi na clausula uses da unit Const Aborted : Boolean = False; var shfo : TSHFileOpStruct; begin FillChar(shfo,SizeOf(shfo),$0); with shfo do begin if Operacao > 2 then begin operacao := 2; end; if Modo > 5 then begin modo := 1; end; case operacao of 1: wFunc := FO_MOVE; 2: wFunc := FO_COPY; end; pFrom := Pchar(Origem); pTo := Pchar(Destino); case Modo of 1: fFlags := FOF_SILENT; 2: fFlags := FOF_ALLOWUNDO or FOF_FILESONLY; 3: fFlags := FOF_RENAMEONCOLLISION; 4: fFlags := FOF_NOCONFIRMATION; 5: fFlags := FOF_SIMPLEPROGRESS; end; end; Result := (SHFileOperation(shfo)= 0) and (not Aborted); end;
