18
Sep

ASP e SQL Server: Pegar o retorno do campo ID da tabela

   Postado por: Paulo H Oliveira   in Ajax, Banco de Dados

Bom pessoal, vamos idealizar uma rotina muito usada, tipo uma vendas de produtos, onde existem a tabela de vendas e a tabela de itens das vendas, e o grande problema é como gravar na tabela itens de vendas o ID da tabela vendas, aqui tem uma solução sem gambiarras nem tabajara code’s. Rotina essa feita em ASP com banco de dados SQL Server, caso queiram outra façam uma solicitação e estudarei o assunto:

Stored Procedure:
CODE
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [ph0g3].[incluir_vendas]
@clienteid int,
@valortotal money,
@vendedorid int
AS
BEGIN
SET NOCOUNT ON;
– Insert statements for procedure here
INSERT INTO vendas
(vnd_clienteid,
vnd_valortotal,
vnd_vendedorid)
VALUES
(@clienteid,
@valortotal,
@vendedorid)
SELECT SCOPE_IDENTITY()
END

Stored Procedure: (Você deve, obrigatoriamente, fazer uma SP para gravar os dados das vendas, dos itens não é necessário ser uma SP)

Read the rest of this entry »

18
Sep

Banco de Dados: Randomizar Dados

   Postado por: Paulo H Oliveira   in Banco de Dados

Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Thanks Tim
Select a random record with Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

Select a random row with MySQL:

SELECT column FROM table

ORDER BY RAND()

LIMIT 1

Select a random row with PostgreSQL:

SELECT column FROM table

ORDER BY RANDOM()

LIMIT 1

Select a random row with Microsoft SQL Server:

SELECT TOP 1 column FROM table

ORDER BY NEWID()

Select a random row with IBM DB2

SELECT column, RAND() as IDX

FROM table

ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Thanks Tim

Select a random record with Oracle:

SELECT column FROM

( SELECT column FROM table

ORDER BY dbms_random.value )

WHERE rownum = 1

18
Sep

Firebird: Diagnosticando e Reparando Banco de Dados Corrompidos

   Postado por: Paulo H Oliveira   in Firebird

Um número grande de tipos de corrupções podem ser reparadas através dos utilitários gfix e gbak. No entanto, é possível que em alguns casos raros o arquivo de banco de dados esteja corrompido de tal maneira que seja impossível para esses utilitários restaura-lo. Nesses casos, medidas mais drásticas podem ser necessárias para colocar o BD on-line novamente. Se voce não conseguir recuperar seu BD, entre em contato conosco e nós veremos o que poderemos fazer para ajudar.

A causa mais freqüente de corrupção é a queda de energia no servidor de banco de dados. Cortar a energia quando uma aplicação está em processo de gravação no Banco de Dados pode resultar que dados incompletos ou corrompidos sejam gravados no arquivo de Banco de Dados. Em todos os casos, o usuário e o administrador de sistema deve tomar todos os cuidados necessários para que isso não aconteça.

O InterBase tem dois modos de escrita (escrita forçada), síncrono e assíncrono. Nas versões anteriores do IB, o modo de escrita padrão era síncrona.

Read the rest of this entry »

31
Jul

PHP: Convertendo datas no PHP com MySql

   Postado por: Paulo H Oliveira   in PHP, Uncategorized

Aqui está uma solução completa para manipulação de dados para usar no PHP com Mysql

Para gravar no banco faremos uma função:

<?php
function formatadata($data){
$dataarray=split(’/',&data);
$datanova=&dataarray[2].’-’.&dataarray[1].’-’.&dataarray[0];
return $datanova;
}
?>

Agora para mostrar na pagina a data no formato correto PT_BR:

<?php echo date(’d/m/Y’, strtotime($data));?> mostrará no formato dd/mm/aaaa

19
Jul

Delphi: Transação DBExpress (Vários exemplos)

   Postado por: Paulo H Oliveira   in Delphi

var
Transacao: TTransactionDesc;
begin
SQLDataSet1.CommandText:= ’select ID, NOME from CLIENTES where ID = :id;
SQLDataSet1.ParamByName(’id’).AsInteger:= 1;
ClientDataSet1.Open; // Note que apenas o TClientDataSet deve ser aberto
with ClientDataSet1 do
begin
Append;
FieldByName(’ID’).AsInteger:= 2005;
FieldByName(’NOME’).AsString:= ‘ClubeDelphi’;
Post;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
if  ApplyUpdates(0) = 0 then
SQLConnection1.Commit(Transacao)
else SQLConnection1.Rollback(Transacao);
end;
==============================================
var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
TudoOK:= False;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
// Aplicando os updates
if ClientDataSet1.ApplyUpdates(0) = 0 then
if ClientDataSet2.ApplyUpdates(0) = 0 then
if ClientDataSet3.ApplyUpdates(0) = 0 then
if ClientDataSet4.ApplyUpdates(0) = 0 then
TudoOK:= True;
// Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates
if TudoOK then
begin
SQLConnection1.Commit(Transacao);
ShowMessage(’Atualizações OK.’);
end
else
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(’Ocorreram erros. Alterações descartadas.’);
end;
end;
==============================================
var
Transacao: TTransactionDesc;
begin
with SQLDataSet1 do
begin
CommandText:= ‘insert into CLIENTES (ID, NOME) values (:id, :nome)’;
ParamByName(’id).AsInteger:= 2005;
ParamByName(’nome’).AsString:= ‘ClubeDelphi’;
Transacao.TransctionID:= 1;
Transacao.IsolationLevel:=  xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
try
ExecSQL;
SQLConnection1.Commit (Transacao);
except
on E: Exception do
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(’Ocorreram erros.’ + #13 + E.Message);
end;
end;
end;
end;

var

Transacao: TTransactionDesc;

begin

SQLDataSet1.CommandText:= ’select ID, NOME from CLIENTES where ID = :id;

SQLDataSet1.ParamByName(’id’).AsInteger:= 1;

ClientDataSet1.Open; // Note que apenas o TClientDataSet deve ser aberto

with ClientDataSet1 do

begin

Append;

FieldByName(’ID’).AsInteger:= 2005;

FieldByName(’NOME’).AsString:= ‘ClubeDelphi’;

Post;

Transacao.TransactionID:= 1;

Transacao.IsolationLevel:=  xilReadCommitted;

SQLConnection1.StartTransaction(Transacao);

if  ApplyUpdates(0) = 0 then

SQLConnection1.Commit(Transacao)

else SQLConnection1.Rollback(Transacao);

end;

Read the rest of this entry »

19
Jul

Delphi: Redimesionar form child em MDI

   Postado por: Paulo H Oliveira   in Clientes

Esta rotina redimensiona o formulário Child de uma aplicação MDI para preencher todo a área do form pai.

procedure TForm1.SetBounds(ALeft, ATop, AWidth,
AHeight: Integer);
var
MainForm: TForm;
Rect: TRect;
//OurWidth: Integer;
//OurHeight: Integer;
begin
if Showing then begin
MainForm := Application.MainForm;
// Obtem o retângulo da área cliente MDI
Windows.GetWindowRect(MainForm.ClientHandle, Rect);
// Calcular largura e altura da área cliente
//OurWidth := Rect.Right – Rect.Left;
//OurHeight := Rect.Bottom – Rect.Top;
// Calcula a nova posição
//ALeft := (OurWidth – Width) div 2;
//ATop := (OurHeight – Height) div 2;
end;
inherited SetBounds(0, 0, Rect.Right-Rect.Left-5, Rect.Bottom-Rect.Top-5);
//inherited SetBounds(ALeft, ATop, AWidth, AHeight);
end;

procedure TForm1.SetBounds(ALeft, ATop, AWidth,

AHeight: Integer);

var

MainForm: TForm;

Rect: TRect;

//OurWidth: Integer;

//OurHeight: Integer;

begin

if Showing then begin

MainForm := Application.MainForm;

// Obtem o retângulo da área cliente MDI

Windows.GetWindowRect(MainForm.ClientHandle, Rect);

// Calcular largura e altura da área cliente

//OurWidth := Rect.Right – Rect.Left;

//OurHeight := Rect.Bottom – Rect.Top;

// Calcula a nova posição

//ALeft := (OurWidth – Width) div 2;

//ATop := (OurHeight – Height) div 2;

end;

inherited SetBounds(0, 0, Rect.Right-Rect.Left-5, Rect.Bottom-Rect.Top-5);

//inherited SetBounds(ALeft, ATop, AWidth, AHeight);

end;

19
Jul

TurboPascal: Efeito Matrix

   Postado por: Paulo H Oliveira   in TurboPascal

Program MATRIX;
Uses Crt;
Var
col,lin,ql,cont,aux:integer;
letra:char;
Begin
Clrscr;
Repeat
col:=1+Random(79);
lin:=1+Random(23);
ql:= Random(10);
for cont:= lin to lin+ql do
Begin
if cont<24 then
Begin
letra:= chr(Random(255));
for aux:=1 to 2 do
Begin
if aux= 1 Then
Textcolor(10)
else
Textcolor(2);
gotoxy(col,cont);
write(letra);
delay(50);
end;
end;
end;
until keypressed;
end.

Program MATRIX;

Uses Crt;

Var

col,lin,ql,cont,aux:integer;

letra:char;

Begin

Clrscr;

Repeat

col:=1+Random(79);

lin:=1+Random(23);

ql:= Random(10);

for cont:= lin to lin+ql do

Begin

if cont<24 then

Begin

letra:= chr(Random(255));

for aux:=1 to 2 do

Begin

if aux= 1 Then

Textcolor(10)

else

Textcolor(2);

gotoxy(col,cont);

write(letra);

delay(50);

end;

end;

end;

until keypressed;

end.

19
Jul

Delphi: Várias dicas de impressão pelo TPrinter

   Postado por: Paulo H Oliveira   in Delphi

if PrintDialog1.Execute then begin
vPrinterLinha := 0;
vFormulario := 66;
Canvas.Font.Name := ‘Courier New’;
Canvas.Font.Size := 8;
Printer.BeginDoc;
with Printer do begin
vPrinterLinha := 1;
vAltura := Canvas.TextHeight(’A');
cdsRel.Last;
cdsRel.First;
try
for vI := 1 to cdsRel.RecordCount do begin
vString := cdsRel.Fieldbyname(’LinRel’).Value;
Canvas.TextOut(0, (vI – 1) * vAltura, vString);
inc(vPrinterLinha);
cdsRel.Next;
if vPrinterLinha > vFormulario – 3 then begin
Printer.NewPage;
vPrinterLinha := 1
end;
end;
finally
EndDoc;
end;
end;
end;
———————————————————————
Impressão com o TPrinter ( Via gerenciador de impressão)
Delphi
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Linha:integer;
Tamanho:integer;
Coluna:integer;
begin
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.Font.Name := ‘Times New Roman’;
Printer.Canvas.Font.Size := 10;
Linha := 20;
Coluna:= 20;
Tamanho := Printer.Canvas.TextWidth(’a');
Table1.First;
while not Table1.Eof do
begin
if Linha = 20 then
begin
Coluna := 20;
Printer.Canvas.TextOut(0,Linha,’Relação de Clientes’);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Printer.Canvas.TextOut(Coluna,Linha,’Cod’);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,’Nome’);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,’Endereço’);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
end;
Coluna := 20 ;
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Codigo’).AsString);
Coluna:= Coluna + (Tamanho * 5 );
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘Nome’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Printer.Canvas.TextOut(Coluna,Linha,Table1.FieldByName(‘End’).AsString);
Coluna:= Coluna + (Tamanho * 30);
Linha := Linha – Printer.Canvas.Font.Height + 5 ;
Table1.Next;
if Linha > Printer.PageHeight-20 then
Begin
Printer.NewPage;
Linha := 20;
end;
end;
Printer.EndDoc;
end;
———————————————————————-
procedure TFOrcamento.ImprimirClick(Sender: TObject);
Var
Linha, Coluna, Quantidade : Integer;
IndiceHorizontal, IndiceVertical, Total, TotalGeral : Real;
Codigo : String;
Begin
With IBQimprime do
begin
close;
sql.Clear;
sql.Add(’ Select orcamento.*, orcamentodet.*, empresa.fantasia, empresa.fone, atendente.nome ‘ +
‘ from orcamento ‘ +
‘ left join orcamentodet on orcamento.id = orcamentodet.idorcamento ‘+
‘ left join empresa on orcamento.idempresa = empresa.id ‘ +
‘ left join atendente on orcamento.idatendente = atendente.id ‘+
‘ where orcamento.id = ‘ + QuotedStr(DBEdit2.Text));
open;
end;
Imprimir.Enabled := False;
Cursor := crHourGlass;
IndiceHorizontal := Printer.PageWidth / 960;
IndiceVertical := Printer.PageHeight / 792;
Printer.canvas.font.Name := ‘Arial’;
Printer.Orientation := poPortrait;
Printer.BeginDoc;
Linha := 0;
Quantidade := 0;
TotalGeral := 0;
With IBQimprime do
Begin
First;
While not eof do // para imprimir toda a tabela
Begin
With Printer.Canvas do
Begin
If Linha = 0 then
Begin
Printer.canvas.font.Name := ‘Monotype Corsiva’;
Printer.canvas.font.style:=[fsitalic];
Font.Size := 20;
Coluna := Round(15 * IndiceHorizontal);
TextOut(Coluna, Linha, IBQimprimeFANTASIA.text);
Coluna := Round(720 * IndiceHorizontal);
TextOut(Coluna, Linha, DateToStr(Now));
Linha := Linha + Round(23 * IndiceVertical);
Coluna := Round(250 * IndiceHorizontal);
Printer.canvas.font.Name := ‘Arial’;
Printer.canvas.font.style:=[];
Font.Size := 20;
TextOut(Coluna, Linha, ‘Emissao do Orçamento ‘);
Linha := Linha + Round(28 * IndiceVertical);
Font.Size := 9;
Coluna := 0;
TextOut(Coluna, Linha, ‘CÓDIGO’);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘QUANT’);
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, ‘VALOR’);
Linha := Linha + (Round(25 * IndiceVertical));
End;
Coluna := 0;
Codigo := IntToStr(IBQimprimeIDPRODUTO.Value);
TextOut(Coluna, Linha, Codigo);
Coluna := Round(90 * IndiceHorizontal);
TextOut(Coluna, Linha, floattostr(IBQimprimeQTDE.Value));
Total := IBQimprimeTOTAL1.Value;
TotalGeral := TotalGeral + Total;
Quantidade := Quantidade + 1;
Coluna := Round(170 * IndiceHorizontal);
TextOut(Coluna, Linha, FloatToStrF(Total, ffFixed, 10, 2));
Linha := Linha + Round(20 * IndiceVertical);
If Linha >= 600 then
Begin
Linha := 0;
Printer.NewPage;
End;
End;
IBQimprime.Next;
End;
End;
Printer.Canvas.Font.Size := 10;
Linha := Linha + Round(25 * IndiceVertical);
If Linha > 600 then
Printer.NewPage;
Coluna := 0;
Printer.Canvas.TextOut(Coluna, Linha, ‘QUANTIDADE TOTAL DE ÍTENS: ‘ + IntToStr(Quantidade));
Linha := Linha + Round(25 * IndiceVertical);
Printer.Canvas.TextOut(Coluna, Linha, ‘VALOR TOTAL: ‘ + FloatToStrF(TotalGeral, ffCurrency, 10, 2));
Printer.EndDoc;
Cursor := crDefault;
———————————————————————–
implementation
Uses Printers;
{$R *.DFM}
procedure TForm1.BtnScanPrintersClick(Sender: TObject);
begin
if Printer.PrinterIndex = -1 then
ShowMessage(’Não há impressoras instaladas.’);
ListBox1.Items := Printer.Printers;
ListBox1.ItemIndex := Printer.PrinterIndex;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
I, Linha, HeightLine: Integer;
begin
Memo2.Lines.Clear;
// Zera a variável
Linha := 0;
// Verifica se tem alguma impressora instalada
if Printer.PrinterIndex = -1 then
Exit;
try
With Printer do
begin
if ListBox1.ItemIndex = -1 then
begin
ShowMessage(’Lista de impressoras não disponível.’);
Exit;
end;
PrinterIndex := ListBox1.ItemIndex;
Printer.Title := ‘Impressão de Teste’;
BeginDoc;
Memo2.Lines.Add(’Imprimindo…’);
// Calcula a altura da linha
HeightLine := Trunc(Printer.Canvas.TextHeight(’My’)*1.1);
for I := 0 to Memo1.Lines.Count -1 do
begin
Canvas.TextOut(50, Linha, Memo1.Lines[I]);
// Calcula a altura da próxima linha
Linha := Linha + HeightLine;
// Se passou do final da página
if Linha >= Printer.PageHeight then
begin
Printer.NewPage;
Linha := 0;
end;
end;
// Termina Impressão
EndDoc;
Memo2.Lines.Add(’Impressão finalizada com sucesso.’);
end;
except
ShowMessage(’Erro ao tentar imprimir ou impressora não disponivel.’);
Memo2.Lines.Add(’Impressão finalizada com erro.’);
end;
end;
————————————————————————
uses Printers;
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(iColuna, iLinha, ‘texto a ser exibido’);
Printer.EndDoc;
end;

if PrintDialog1.Execute then begin

vPrinterLinha := 0;

vFormulario := 66;

Canvas.Font.Name := ‘Courier New’;

Canvas.Font.Size := 8;

Printer.BeginDoc;

with Printer do begin

vPrinterLinha := 1;

vAltura := Canvas.TextHeight(’A');

cdsRel.Last;

cdsRel.First;

try

for vI := 1 to cdsRel.RecordCount do begin

vString := cdsRel.Fieldbyname(’LinRel’).Value;

Canvas.TextOut(0, (vI – 1) * vAltura, vString);

inc(vPrinterLinha);

cdsRel.Next;

if vPrinterLinha > vFormulario – 3 then begin

Printer.NewPage;

vPrinterLinha := 1

end;

end;

finally

EndDoc;

end;

end;

end;

Read the rest of this entry »

19
Jul

Javascript: Executar um EXE

   Postado por: Paulo H Oliveira   in Javascript

<script TYPE=”text/javascript”>
function Executar(Servidor, Caminho, DirTrabalho) {
var param = “/inc/TerminalService/rodar.asp?Servidor=”+Servidor+”&Caminho=”+escape(Caminho)+”&DirTrabalho=”+escape(DirTrabalho);
//        alert(Caminho);
window.open(param,’_blank’,”);
}</script>
<a HREF=”java script:Executar(’SERVIDOR’, ‘C:/Terminal/arquivo.exe’,”);”>Teste</a>

<script TYPE=”text/javascript”>

function Executar(Servidor, Caminho, DirTrabalho) {

var param = “/inc/TerminalService/rodar.asp?Servidor=”+Servidor+”&Caminho=”+escape(Caminho)+”&DirTrabalho=”+escape(DirTrabalho);

//        alert(Caminho);

window.open(param,’_blank’,”);

}</script>

<a HREF=”java script:Executar(’SERVIDOR’, ‘C:/Terminal/arquivo.exe’,”);”>Teste</a>

19
Jul

Delphi: Funções Matemáticas

   Postado por: Paulo H Oliveira   in Delphi

Funções Matematicas do Delphi

O artigo irá mostrar as principais funções matemáticas utilizadas tanto pelo Delphi quanto no Kylix. Para quem é amante da matemática e utiliza o recurso da informática (na programação) para calcular, não pode deixar de ler este artigo que contém várias funções para cálculo, tais como: cáculo de ângulos, médias e muito mais.

Mas, porque deste artigo, se as mesmas podem ser encontradas no Help do Delphi? Ai é que está! As definições do help estão em inglês e para uma pessoa que não entenda este idioma ficaria difícil descobrir para que servem determinadas funções. Por isso este artigo, que irá facilitar a vida de milhares de programadores que têm dificuldade com o inglês. Agora deixamos de muita convera e vamos ao que interessa. Confira as principais funções com suas respectivas definições e como declará-las.

Read the rest of this entry »