السلام عليكم
هل هناك طريقتين فقط للاتصال بقاعدة ما
اقتباس1-DataReadersIDbDataAdapters-2
ولمادا DataReaders وان IDbDataAdapters اسهل بكثير ولما لا الاثنين معا
هدا مثال عن الريط ياكسس قمت بانشائه لكم مبتدا في .NET
ارجوا افادتي
{
Unit : permettant d'interagir avec une base de données MS Access.
<!-- Auteur : Zekiri abdelali -->
<!-- Version : 1.0 -->
<!-- Date : 13/08/2007 -->
<!-- Group : IACP INFORMATIQUE -->
}
unit AccessBDManager;
interface
uses System.Data.OleDb,System.Data;
function Get_ConnectionString : string;
function Get_Provider : string;
function State : System.Data.ConnectionState;
procedure AccessBDOpen(BDPath : string );
function ExecuteRequest(SQLRequest : string) : Integer;
function ExecuteSelectRequest(SQLRequest : string) :OleDbDataReader ;
procedure CloseReader();
procedure Free();
var
/// Connexion à la base de données.
connection : OleDbConnection;
/// DataReader interne.
reader : OleDbDataReader;
/// requête OLE
command : OleDbCommand;
implementation
//________________Obtient la chaîne de connexion à la base de données. _________
function Get_ConnectionString : string;
begin
if connection <> nil then
Result := connection.ConnectionString
else
Result := '';
end;
//______________/// Obtient le fournisseur d'accès à la base de données. _______
/// <example>Microsoft Jet OLEDB</example>
function Get_Provider : string;
begin
if connection <> nil then
Result := connection.Provider
else
Result := '';
end;
//_____________________ Obtient le statut de la connexion. _____________________
function State : System.Data.ConnectionState;
begin
if connection <> nil then
Result := connection.State
else
Result := System.Data.ConnectionState.Closed;
end;
//_______ Ouvre une connexion sans mot de passe à une base de données. _________
procedure AccessBDOpen(BDPath : string );
begin
connection := OleDbConnection.Create('PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=' + BDPath);
// Ouvre la connexion.
try
connection.Open();
Except on E: Exception do
Console.WriteLine(E.Message)
end;
end;
{___________Exécute une requête de type "non-query" sur la base de donnée
<param name="SQLRequest">La requête SQL.</param>
<returns>Le nombre de lignes affectées par la requête.</returns>
<exception cref="BDManager.BDManagerException"></exception>_______________}
function ExecuteRequest(SQLRequest : string) : Integer;
begin
if (connection <> nil) and (connection.State = System.Data.ConnectionState.Open) then
begin
if (reader = nil)then
begin
command := OleDbCommand.Create(SQLRequest, connection);
try
Result:= command.ExecuteNonQuery();
Except on E: Exception do
Console.WriteLine(E.Message)
end;
end
else
Console.WriteLine('Impossible d''exécuter la requête car le DataReader de la requête précédente est demeuré ouvert.');
end
else
Console.WriteLine('Impossible d''exécuter la requête car la connexion est fermée.');
end;
{___________Eécute une requête de type "SELECT" sur la base de données.
<param name="SQLRequest">La requête SQL</param>
<returns>Un DataReader pointant sur le jeu de résultats de la requête.</returns>
<exception cref="BDManager.BDManagerException"></exception>_________________}
function ExecuteSelectRequest(SQLRequest : string) :OleDbDataReader ;
begin
if (connection <> nil) and (connection.State = System.Data.ConnectionState.Open) then
begin
if (reader = nil) then
begin
command := OleDbCommand.create(SQLRequest, connection);
try
reader := command.ExecuteReader();
Except on E: Exception do
Console.WriteLine(E.Message)
end;
Result:= reader;
end
else
Console.WriteLine('Impossible d''exécuter la requête car le DataReader de la requête précédente est demeuré ouvert.');
end
else
Console.WriteLine('Impossible d''exécuter la requête car la connexion est fermée.');
end;
{_____Ferme le DataReader interne afin de pouvoir exécuter une nouvelle
requête sur la même connexion.___________________}
procedure CloseReader();
begin
if (connection <> nil) and (connection.State = System.Data.ConnectionState.Open) then
begin
if (reader <> nil) then
begin // Ferme le DataReader.
try
reader.Close();
Except on E: Exception do
Console.WriteLine(E.Message)
end;
end
else
Console.WriteLine('Impossible de fermer le DataReader car celui-ci l''est déjà.');
end
else
Console.WriteLine('Impossible de fermer le DataReader car la connexion est fermée.');
end;
//________________ Ferme la connexion à la base de données._____________________
procedure Free();
begin
if (connection <> nil) and (connection.State = System.Data.ConnectionState.Open) then
begin // Ferme la connexion.
try
if (reader <> nil) and (reader.IsClosed) then
CloseReader();
connection.Close();
connection := nil;
Except on E: Exception do
Console.WriteLine(E.Message)
end;
end
else
Console.WriteLine('Impossible de fermer la connexion car celle-ci l''est déjà.');
end;
end.كود الواجهة
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.StdCtrls, System.ComponentModel, Borland.Vcl.Mask,
Borland.Vcl.DBCtrls, Borland.Vcl.Grids, Borland.Vcl.DBGrids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button7Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure SelectRecord(iRecno:integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
vSql:string;
implementation{$R *.nfm}
uses AccessBDManager,System.Data.OleDb,System.Data;
procedure TForm1.FormCreate(Sender: TObject);
var table : OleDbDataReader;
vRecordCount,i : integer;
begin
AccessBDOpen('C:\\MyData.mdb') ;
table := AccessBDManager.ExecuteSelectRequest('select * from Table1 ORDER BY Name');
StringGrid1.ColCount:= table.FieldCount;
for i:= 0 to StringGrid1.ColCount-1 do
StringGrid1.Cells[i,0]:= table.GetName(i);
i:= 1;vRecordCount:=0;
while table.Read <> False do
begin
StringGrid1.Cells[0,i]:= table.Item[0].ToString;
StringGrid1.Cells[1,i]:= table.Item[1].ToString;
StringGrid1.Cells[2,i]:= table.Item[2].ToString;
i:=i+1;
vRecordCount:=vRecordCount + 1;
end;
StringGrid1.RowCount:=vRecordCount;
SelectRecord(1);
end;
procedure TForm1.SelectRecord(iRecno:integer);
begin
edit1.Text:=StringGrid1.Cells[0,iRecno];
edit2.Text:=StringGrid1.Cells[1,iRecno];
edit3.Text:=StringGrid1.Cells[2,iRecno];
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
vSql:='INSERT INTO Table (NAME,City,Mobile) VALUES ('''+edit1.Text+' '','' '+edit2.Text+' '','+edit3.text+')';
ExecuteRequest(vSql);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
vSql:='delete fro Table where name = '''+edit1.Text+'''';
ExecuteRequest(vSql);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
vSql:='UPDATE table SET name='''+edit1.Text+''', City ='''+edit2.Text+''', Mobile ='+edit3.text;
ExecuteRequest(vSql);
end;
end.