السلام عليكــم ورحمـة الله وبركاتــة ،،
بنفس الطريقة السايقة لربط مع اسكل سرفر هذا مثال عن الربط بالاكسل عن طريق OleDB
هي كلاس كاملة و في المثال استعملت سوي العرض
namespace GEST_Farm[color= #339933;];
[color= #000000; font-weight: bold;]interface
uses
[color= #990000;]System[color= #339933;].Collections[color= #339933;].Generic[color= #339933;],
[color= #990000;]System[color= #339933;].Linq[color= #339933;],
[color= #990000;]System[color= #339933;].Text[color= #339933;],
[color= #990000;]System[color= #339933;].Data[color= #339933;],
[color= #990000;]System[color= #339933;].Data[color= #339933;].OleDb[color= #339933;];
type
OleExcel [color= #339933;]= [color= #000000; font-weight: bold;]public [color= #000000; font-weight: bold;]class
[color= #000000; font-weight: bold;]private
_iNbRows [color= #339933;]:Integer[color= #339933;];
_iNbCols [color= #339933;]:Integer[color= #339933;];
_strCnx [color= #339933;]:String[color= #339933;];
_OleCnx [color= #339933;]:OleDbConnection[color= #339933;];
_OleCmd [color= #339933;]:OleDbCommand[color= #339933;];
_OleReader [color= #339933;]:OleDbDataReader[color= #339933;];
_OleDA [color= #339933;]:OleDbDataAdapter[color= #339933;];
_OleDs [color= #339933;]:DataSet[color= #339933;];
protected
[color= #000000; font-weight: bold;]public
METHOD connect[color= #009900;](sPath[color= #339933;]:string[color= #009900;])[color= #339933;]:Boolean[color= #339933;];
METHOD NbRows[color= #339933;]:integer[color= #339933;];
METHOD NbCols[color= #339933;]:integer[color= #339933;];
METHOD OleDs[color= #339933;]:DataSet[color= #339933;];
METHOD OleCnx[color= #339933;]:OleDbConnection[color= #339933;];
METHOD deconnect[color= #009900;]([color= #009900;])[color= #339933;]:boolean[color= #339933;];
METHOD GetQueryResult[color= #009900;](sSql[color= #339933;]:string[color= #009900;])[color= #339933;]: Object[color= #339933;];
METHOD Remplir[color= #009900;](sSQL[color= #339933;]:string[color= #009900;])[color= #339933;]:string[color= #339933;];
METHOD nonQueryOrder[color= #009900;](sSQL[color= #339933;]:string[color= #009900;])[color= #339933;]:boolean[color= #339933;];
constructor [color= #339933;];
[color= #990000;]end[color= #339933;];
implementation
[color= #666666; font-style: italic;]/// <summary>Constructeur de la classe</summary>
constructor OleExcel[color= #339933;];
BEGIN
_iNbRows [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
_iNbCols [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
_OleCnx [color= #339933;]:= [color= #000000; font-weight: bold;]new OleDbConnection[color= #339933;];
_OleCmd [color= #339933;]:= [color= #000000; font-weight: bold;]new OleDbCommand[color= #339933;];
_OleReader [color= #339933;]:= nil[color= #339933;];
_OleDs [color= #339933;]:= [color= #000000; font-weight: bold;]new DataSet[color= #339933;];
[color= #990000;]END[color= #339933;];
METHOD OleExcel[color= #339933;].connect[color= #009900;](sPath[color= #339933;]:string[color= #009900;])[color= #339933;]:Boolean[color= #339933;];
BEGIN
[color= #666666; font-style: italic;]// Chaine de connexion
_strCnx [color= #339933;]:= [color= #0000ff;]'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' [color= #339933;]+
sPath [color= #339933;]+ [color= #0000ff;]';Extended Properties=' [color= #339933;]+
char[color= #009900;]([color= #cc66cc;]34[color= #009900;]) [color= #339933;]+[color= #0000ff;]'Excel 8.0;HDR=Yes;' [color= #339933;]+ char[color= #009900;]([color= #cc66cc;]34[color= #009900;]) [color= #339933;]+ [color= #0000ff;]';'[color= #339933;];
[color= #666666; font-style: italic;]// vérification globale des données entrantes
[color= #b1b100;]IF [color= #009900;](sPath [color= #339933;]<> string[color= #339933;].[color= #990000;]Empty[color= #009900;]) THEN
BEGIN
[color= #b1b100;]IF[color= #009900;]([color= #990000;]System[color= #339933;].IO[color= #339933;].[color= #990000;]File[color= #339933;].Exists[color= #009900;](sPath[color= #009900;])[color= #009900;])THEN
BEGIN
_OleCnx [color= #339933;]:= [color= #000000; font-weight: bold;]new [color= #990000;]System[color= #339933;].Data[color= #339933;].OleDb[color= #339933;].OleDbConnection[color= #009900;](_strCnx[color= #009900;])[color= #339933;];
_iNbCols [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
_iNbRows [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
TRY
[color= #666666; font-style: italic;]// ouvertur de la connexion
_OleCnx[color= #339933;].Open[color= #009900;]([color= #009900;])[color= #339933;];
Result[color= #339933;]:= [color= #000000; font-weight: bold;]true[color= #339933;];
EXCEPT ON E[color= #339933;]:Exception [color= #b1b100;]DO
Result[color= #339933;]:= [color= #000000; font-weight: bold;]false[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// Récupère le nombre de ligne d'une requête
METHOD OleExcel[color= #339933;].NbRows[color= #339933;]:integer[color= #339933;];
BEGIN
Result[color= #339933;]:= _iNbRows[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// Récupère le nombre de colone d'une requête
METHOD OleExcel[color= #339933;].NbCols[color= #339933;]:integer[color= #339933;];
BEGIN
Result[color= #339933;]:=_iNbCols[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// DataSet
METHOD OleExcel[color= #339933;].OleDs[color= #339933;]:DataSet[color= #339933;];
BEGIN
Result[color= #339933;]:=_OleDs[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// SqlConnection
METHOD OleExcel[color= #339933;].OleCnx[color= #339933;]:OleDbConnection[color= #339933;];
BEGIN
Result[color= #339933;]:=_OleCnx[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// Lance un ordre de déconnexion de la base de données SQLServer
METHOD OleExcel[color= #339933;].deconnect[color= #009900;]([color= #009900;])[color= #339933;]:boolean[color= #339933;];
BEGIN
TRY
BEGIN
_OleCnx[color= #339933;].Close[color= #009900;]([color= #009900;])[color= #339933;];
Result[color= #339933;]:= [color= #000000; font-weight: bold;]true[color= #339933;];
[color= #990000;]END
Except
Result[color= #339933;]:= [color= #000000; font-weight: bold;]false[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// <summary>Récupère les valeurs d'une requête</summary>
[color= #666666; font-style: italic;]// <param name="sSql">Requête à exécuter</param>
[color= #666666; font-style: italic;]// <returns>Renvoi les valeurs de la requête sans les valeurs NULL</returns>
METHOD OleExcel[color= #339933;].GetQueryResult[color= #009900;](sSql[color= #339933;]:string[color= #009900;])[color= #339933;]: Object[color= #339933;];
[color= #000000; font-weight: bold;]VAR
oArrResult[color= #339933;]:TOBJ[color= #339933;];
j[color= #339933;],i[color= #339933;]:integer[color= #339933;];
BEGIN
_OleCmd [color= #339933;]:= [color= #000000; font-weight: bold;]new OleDBCommand[color= #009900;](sSql[color= #339933;], _OleCnx[color= #009900;])[color= #339933;];
_OleReader [color= #339933;]:= nil[color= #339933;];
_OleReader [color= #339933;]:= _OleCmd[color= #339933;].ExecuteReader[color= #009900;]([color= #009900;])[color= #339933;];
_iNbRows [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
_iNbCols [color= #339933;]:= _OleReader[color= #339933;].FieldCount[color= #339933;];
[color= #666666; font-style: italic;]// Initialisation du tableau de retour
[color= #b1b100;]WHILE _OleReader[color= #339933;].Read[color= #009900;]([color= #009900;]) [color= #b1b100;]DO
BEGIN
_iNbRows[color= #339933;]:=_iNbRows[color= #cc66cc;]+1[color= #339933;];
[color= #990000;]END[color= #339933;];
oArrResult [color= #339933;]:= [color= #000000; font-weight: bold;]new TOBJ[color= #009900;](_iNbRows[color= #339933;],_iNbCols[color= #009900;])[color= #339933;];
_OleReader[color= #339933;].Close[color= #009900;]([color= #009900;])[color= #339933;];
[color= #666666; font-style: italic;]// Remplissage du tableau de retour
TRY
BEGIN
_OleReader [color= #339933;]:= _OleCmd[color= #339933;].ExecuteReader[color= #009900;]([color= #009900;])[color= #339933;];
i [color= #339933;]:= [color= #cc66cc;]0[color= #339933;];
[color= #b1b100;]WHILE [color= #009900;](_OleReader[color= #339933;].Read[color= #009900;]([color= #009900;])[color= #009900;]) [color= #b1b100;]DO
BEGIN
[color= #b1b100;]FOR j[color= #339933;]:=[color= #cc66cc;]0 TO _iNbCols[color= #cc66cc;]-1 [color= #b1b100;]DO
BEGIN
[color= #b1b100;]if not _OleReader[color= #339933;].IsDBNull[color= #009900;](j[color= #009900;]) then [color= #666666; font-style: italic;]//Supprime les NULL comme moi
[color= #666666; font-style: italic;]//oArrResult[i,j] := _OleReader.GetSqlValue(j)
[color= #b1b100;]else
[color= #666666; font-style: italic;]//oArrResult[i,j] := '';
[color= #990000;]END[color= #339933;];
i[color= #339933;]:=i[color= #cc66cc;]+1[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
EXCEPT
BEGIN [color= #666666; font-style: italic;]// gestionErreur(SQLEx);
Result [color= #339933;]:= nil[color= #339933;];
[color= #990000;]END[color= #339933;];
_OleReader[color= #339933;].Close[color= #009900;]([color= #009900;])[color= #339933;];
_OleCmd [color= #339933;]:= nil[color= #339933;];
_OleReader [color= #339933;]:= nil[color= #339933;];
Result[color= #339933;]:= oArrResult[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// <summary>Récupère les valeurs d'une requête pour remplir une liste, un datagrid, ...</summar
y>
[color= #666666; font-style: italic;]// <param name="sSql">Requête à exécuter</param>
[color= #666666; font-style: italic;]// <returns>Renvoi les valeurs de la requête</returns>
METHOD OleExcel[color= #339933;].Remplir[color= #009900;](sSQL[color= #339933;]:string[color= #009900;])[color= #339933;]:string[color= #339933;];
BEGIN
_OleDs[color= #339933;].Clear[color= #009900;]([color= #009900;])[color= #339933;];
TRY
_OleDA [color= #339933;]:= [color= #000000; font-weight: bold;]new OleDBDataAdapter[color= #009900;](sSQL[color= #339933;],_OleCnx[color= #009900;])[color= #339933;];
_OleDA[color= #339933;].Fill[color= #009900;](_OleDs[color= #009900;])[color= #339933;];
_OleDA[color= #339933;].Dispose[color= #009900;]([color= #009900;])[color= #339933;];
Result[color= #339933;]:= [color= #0000ff;]''[color= #339933;];
EXCEPT ON E[color= #339933;]:Exception [color= #b1b100;]DO [color= #666666; font-style: italic;]//gestionErreur(SQLEx);
[color= #990000;]System[color= #339933;].Windows[color= #339933;].Forms[color= #339933;].MessageBox[color= #339933;].show[color= #009900;](E[color= #339933;].message[color= #009900;])[color= #339933;];
[color= #666666; font-style: italic;]//Result:= nil;
[color= #990000;]END[color= #339933;];
_OleDA [color= #339933;]:= nil[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #666666; font-style: italic;]// <summary>Lance un ordre SQL de INSERT, UPDATE ou DELETE</summary>
[color= #666666; font-style: italic;]// <param name="sSql">Requête à exécuter</param>
[color= #666666; font-style: italic;]// <returns>Renvoi true si l'odre SQL s'est déroulé normallement, false sinon</returns>
METHOD OleExcel[color= #339933;].nonQueryOrder[color= #009900;](sSQL[color= #339933;]:string[color= #009900;])[color= #339933;]:boolean[color= #339933;];
BEGIN
_OleCmd [color= #339933;]:=[color= #000000; font-weight: bold;]new OleDBCommand[color= #009900;](sSql[color= #339933;], _OleCnx[color= #009900;])[color= #339933;];
TRY
BEGIN
_OleCmd[color= #339933;].ExecuteNonQuery[color= #009900;]([color= #009900;])[color= #339933;];
Result[color= #339933;]:= [color= #000000; font-weight: bold;]true[color= #339933;];
[color= #990000;]END[color= #339933;];
EXCEPT
BEGIN [color= #666666; font-style: italic;]// gestionErreur(SQLEx);
Result[color= #339933;]:= [color= #000000; font-weight: bold;]false[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]END[color= #339933;];
_OleCmd [color= #339933;]:= nil[color= #339933;];
[color= #990000;]END[color= #339933;];
[color= #990000;]end[color= #339933;].
method MainForm[color= #339933;].button1_Click[color= #009900;](sender[color= #339933;]: [color= #990000;]System[color= #339933;].Object[color= #339933;]; e[color= #339933;]: [color= #990000;]System[color= #339933;].EventArgs[color= #009900;])[color= #339933;];
CONST
vXlsPath[color= #339933;]=[color= #0000ff;]'c:[color= #000099; font-weight: bold;]DATA.xls'[color= #339933;];
[color= #000000; font-weight: bold;]VAR
o_OleExcel[color= #339933;]:GEST_Farm[color= #339933;].OleExcel[color= #339933;];
begin
o_OleExcel[color= #339933;]:= [color= #000000; font-weight: bold;]new GEST_Farm[color= #339933;].OleExcel[color= #339933;];
[color= #b1b100;]if[color= #009900;](o_OleExcel[color= #339933;].connect[color= #009900;](vXlsPath[color= #009900;])[color= #009900;])then
[color= #b1b100;]if o_OleExcel[color= #339933;].Remplir[color= #009900;]([color= #0000ff;]'SELECT CODE,NOM,PNOM,AGE FROM [Table1$]'[color= #009900;])[color= #339933;]=[color= #0000ff;]'' then
bindingSource1[color= #339933;].DataSource[color= #339933;]:=o_OleExcel[color= #339933;].OleDs[color= #339933;].Tables[color= #009900;][[color= #cc66cc;]0[color= #009900;]][color= #339933;];
dataGridView1[color= #339933;].DataSource[color= #339933;]:=bindingSource1[color= #339933;];
bindingNavigator1[color= #339933;].BindingSource[color= #339933;]:=bindingSource1[color= #339933;];
o_OleExcel[color= #339933;].deconnect[color= #009900;]([color= #009900;])[color= #339933;];
[color= #990000;]end[color= #339933;];