Duvidas Delphi7 X ADO X SQL SERVER 2000

19/09/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


Arc

Respostas

19/09/2004

Bon Jovi

Duvida 1)

--- Via linha de código mesmo:

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:

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.


Responder Citar

20/09/2004

Arc

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?????


Responder Citar

21/09/2004

Bon Jovi

ctQuery = cmdText.


Responder Citar

21/09/2004

Arc

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


Responder Citar

21/09/2004

Bon Jovi

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).


Responder Citar