Array
(
)

Duvidas Delphi7 X ADO X SQL SERVER 2000

Arc
   - 19 set 2004

Duvida 1)
Criei uma tabela de orcamentos e uma de codigos, neste ultimo consta o codorc(codigo do orcamento, que nesta tabela é um sequencial, na tabela orcamentos ele é char(6) para usar zeros a esquerda, exemplo 000002).
Gostaria de saber qual a melhor forma de incrementar este codigo.
Todos os campos da tela são edits comuns não os dbedits, e a geração do codigo, só devera acontecer qdo o usuario clicar no botão Salvar. Devo usar uma Stored Procedure ??? ou fazer isso em linha de codigo mesmo?
Estou usando TAOQuery e Sql Server 2000. Sistema rodando em rede.

Duvida 2)
Ja fiz uma busca referente a criptografia...., mas não cheguei a uma conclusão:
Gostaria de saber qual a forma mais simples e facil de criptografar e descriptografar uma senha dentro da tabela do sql server 2000.

Duvida 3)
Sei que ja postei uma duvida parecida, mas ainda não entendi quais as funções e como funcionam o ClientDataSet e o DataSetProvider com o ADO..

Duvida 4)
Tambem ja postei essa.
O que devo fazer para controlar o acesso aos dados em rede??? Se dois usuarios tentam acessar as mesmas informações ao mesmo tempo.

Grato


Bon Jovi
   - 19 set 2004

Duvida 1)

--- Via linha de código mesmo:

#Código


unit Unit1;

interface

uses
SysUtils, Classes, DB, ADODB;

type
TDataModule1 = class(TDataModule)
ADOConnection1: TADOConnection;
private
{ Private declarations }
public
{ Public declarations }
function NovoSeq(Tabela, Campo: string; Condicao: string): integer; overload;
function NovoSeq(Tabela, Campo: string): integer; overload;
end;

implementation

{$R *.dfm}

function TDataModule1.NovoSeq(Tabela, Campo: string): integer;
begin
Result := NovoSeq(Tabela, Campo, ´´);
end;

function TDataModule1.NovoSeq(Tabela, Campo: string; Condicao: string): integer;
var
DataSet: TADODataSet;
begin
DataSet := TADODataSet.Create(nil);
try
if Condicao <> ´´ then
Condicao := ´ WHERE ´ + Condicao;
DataSet.Connection := Self.ADOConnection1;
DataSet.Close;
DataSet.CommandText :=
´SELECT MAX(´ + Campo + ´) AS ULTIMO ´ +
´FROM ´ + Tabela + Condicao;
DataSet.Open;

if DataSet.FieldByName(´ULTIMO´).IsNull then
Result := 1
else
Result := DataSet.FieldByName(´ULTIMO´).AsInteger + 1;
DataSet.Close;
DataSet.Connection := nil;
finally
FreeAndNil(DataSet);
end;
end;

end.


--- Ou via IDENTITY, que torna o campo autoincremento:

#Código

CREATE TABLE TESTE
(
CAMPO INT IDENTITY NOT NULL,
CAMPO2 VARCHAR(50),
PRIMARY KEY (CAMPO)
)


Particularmente prefiro via código, chamando a funcao no evento BeforePost, verificando se o dataset está em modo de insercao.

Duvida 2)
Realmente irá encontrar muita coisa aqui no fórum. Um de vários tópicos encontrados:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=13772&highlight=criptografia

Duvida 3)
Também encontrará muita coisa, mais direcionado para dbExpress, sendo q dá no mesmo o aprendizado. SQLDataSet é similar ao ADODataSet, SQLQuery é similar ao ADOQuery e SQLConnection é similar ao ADOConnection.
Um dos tópicos explicando, indicando até uma apostila:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=51221&highlight=clientdataset+tdatasetprovider

Duvida 4)
Em que sentido? Qto a evitar ler sujeira (dados nao comitados) e evitar gravar num registro que esteja sendo gravado por outro usuario, com a conexão no modo ilReadCommitted/ilCursorStability o SQLServer já faz o travamento automático nas transações abertas.


Arc
   - 20 set 2004

Em relação a apostila do DBExpress, eu baixei e achei bem interessante, só tenho uma duvida no componente SQLDataSet a propriedade CommandType aceita ctQuery, ctStoredProc e ctTable.
Agora no DataSet da paleta ADO os valores são outros: cmdText, cmdFile, cmdStoredProc, cmdTable, cmdTableDirect e cmdUnknown, qual o correspondente para ctQuery do DBExpress?????


Bon Jovi
   - 21 set 2004

ctQuery = cmdText.


Arc
   - 21 set 2004

O ADODATASET não tem execsql ??????????


Bon Jovi
   - 21 set 2004

Ele nao. Mas vc pode usar diretamente o ADOConnection chamando o método Execute. Assim vc nem precisa criar DataSet pra executar comandos.

Outras alternativas sao ADOCommand (também .Execute) e ADOQuery (.ExecSQL).