delphi4arab منتديات دلفي للعرب

نسخة كاملة : ما هو الخطأ في هذه الملفات
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
بسم الله الرحمن الرحيم
الصلاة والسلام عل رسول الله وعلى آله وصحبه أجمعين

ما هو الخطأ في هذه الملفات

أردت من هذا المثال أن أعمل برنامج يعمل على عدة اصدارات من دلفي مثلا
Delphi7 and Delphi 10.2

جعلت كل العناصر التي تتعامل مع ملفات قاعدة البيالنات في ملف دي ال ال
DLL
بدلفي 7
وجعلت البرنامج الذي يستدعي دي ال ال بدلفي 10.2

الاخطاء
عندما تضغط فوق الزر Afficher مرتين أو أكثر تظهر رسالة خطأ
اذا أدخلت معلومات الى قاعدة البيانات من دلفي 10.2 تظهر برموز غريبة


مشروع ملف دي ال ال بدلفي7
dll delphi 7 borland.rar
https://www.mediafire.com/file/m6mihm6xx...orland.rar

الملف التنفيذي بدلفي7 وملفات قاعدة البيانات
executable et base de donnee delphi7 b.rar
https://www.mediafire.com/file/qo1grmnhe...i7%20b.rar

الملف التنفيذي بدلفي10.2 وملفات قاعدة البيانات
executable et base de donnee delphi 10.2.rar
https://www.mediafire.com/file/a8tvgkaj3...2010.2.rar

بعض الاخطاء التي تظهر
Image.rar
https://www.mediafire.com/file/vq2i8885c.../Image.rar

المشروع بدلفي7
projet delphi 7 borland.rar
https://www.mediafire.com/file/iqe9hq6ii...orland.rar

المشروع بدلفي10.2
projet delphi 10.2.rar
https://www.mediafire.com/file/88m9p5l7a...2010.2.rar

ملف دي ال ال الكود

كود :
unit untDataModule; interface uses  SysUtils, Classes, DB, DBTables, Dialogs,Controls; type  TDataModule1 = class(TDataModule)  private  public  end;  procedure db100(cd,nm,pnm: string);  stdcall;  procedure dbOut100(sear: string; var cd,nm,pnm: string);  stdcall;  function dbPassword(sear: string): boolean;  stdcall;  procedure Add_dbPassword(Mot_de: string);  stdcall;  procedure dbDEL100(sear: string);  stdcall;                     type  arryee= array of string; //ansistring  widestring procedure dbTable100(var cont: integer; var arrya, arrya1,arrya2: arryee); stdcall; var  DataModule1: TDataModule1; // arry: array of arryee; implementation {$R *.dfm} procedure db100(cd,nm,pnm: string); stdcall; var ffm: tTable; begin   ffm := tTable.Create(nil);   try    ffm.Close;    ffm.TableName := 'person1.db';    ffm.Open;    ffm.Last;    ffm.Append;    ffm.FieldByName('Code').AsString := cd;    ffm.FieldByName('Nom').AsString := nm;    ffm.FieldByName('Porenom').AsString := pnm;    ffm.Post;   finally    ffm.Free;   end; end; procedure dbTable100(var cont: integer; var arrya, arrya1,arrya2: arryee); stdcall; var   tab10: TTable;   i: integer; begin   i := 0;   tab10 := TTable.Create(nil);   try    tab10.Close;    tab10.TableName := 'person1.db';    tab10.Open;    cont := tab10.RecordCount;    SetLength(arrya,cont);    SetLength(arrya1,cont);    SetLength(arrya2,cont);    tab10.DisableControls;    try    tab10.First;    while not tab10.Eof do    begin      arrya[i] := tab10.FieldByName('Code').AsString;      arrya1[i] := tab10.FieldByName('Nom').AsString;      arrya2[i] := tab10.FieldByName('Porenom').AsString;      tab10.Next;      i := i + 1;    end;    finally      tab10.EnableControls;    end;   finally      tab10.Free;   end; end; function dbPassword(sear: string): boolean;  stdcall; var tblPass: tTable; begin   tblPass := tTable.Create(nil);   try    tblPass.Close;    tblPass.TableName := 'motdepass.db';    tblPass.Open;    if tblPass.Locate('Mot',sear,[]) then Result := true      else Result := false;   finally    tblPass.Free;   end; end; procedure Add_dbPassword(Mot_de: string);  stdcall; var tblPass: tTable; begin   tblPass := tTable.Create(nil);   try    tblPass.Close;    tblPass.TableName := 'motdepass.db';    tblPass.Open;    tblPass.First;    if tblPass.RecordCount>0 then tblPass.Append      else tblPass.Edit;    tblPass.FieldByName('Mot').AsString := Mot_de;    tblPass.Post;   finally    tblPass.Free;   end; end; procedure dbOut100(sear: string; var cd,nm,pnm: string);  stdcall; var tblOut: tTable; begin   tblOut := tTable.Create(nil);   try    tblOut.Close;    tblOut.TableName := 'person1.db';    tblOut.Open;    tblOut.Locate('Nom',sear,[]);    cd := tblOut.FieldByName('Code').AsString;    nm := tblOut.FieldByName('Nom').AsString;    pnm := tblOut.FieldByName('Porenom').AsString;   finally    tblOut.Free;   end; end; procedure dbDEL100(sear: string);  stdcall; var tblDEL: tTable; s1: string;   begin   tblDEL := tTable.Create(nil);   try    tblDEL.Close;    tblDEL.TableName := 'person1.db';    tblDEL.Open;    tblDEL.Locate('Nom',sear,[]);    s1 := tblDEL.FieldByName('Nom').AsString;    if MessageDlg('هل تريد حذف هذا الاسم '+    s1+' ?',mtWarning,[mbYes, mbNo],0)     = mrYes then tblDEL.Delete;   finally    tblDEL.Free;   end; end; exports db100 name 'dbin', dbOut100 name 'dbout',      dbTable100 name 'dbTab', dbPassword name 'Passwords',        Add_dbPassword name 'Add_dbPasswords', dbDEL100 name 'DEL100'; end
.

البرنامج بدلفي 10.2  الكود:

كود :
unit Unit3; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls; type  TForm3 = class(TForm)    Memo1: TMemo;    Button5: TButton;    GroupBox1: TGroupBox;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Button2: TButton;    Edit3: TEdit;    Edit2: TEdit;    Edit1: TEdit;    GroupBox2: TGroupBox;    Edit4: TEdit;    Button3: TButton;    Button1: TButton;    GroupBox3: TGroupBox;    Edit5: TEdit;    Button4: TButton;    StringGrid1: TStringGrid;    GroupBox4: TGroupBox;    Edit6: TEdit;    Button6: TButton;    procedure Button5Click(Sender: TObject);    procedure Button2Click(Sender: TObject);    procedure Button3Click(Sender: TObject);    procedure Button4Click(Sender: TObject);    procedure Button6Click(Sender: TObject);    procedure Button1Click(Sender: TObject);    procedure FormClose(Sender: TObject; var Action: TCloseAction);  private  public  end;  procedure db100(cd,nm,pnm: string);  stdcall;  external 'ProjectDLL.dll' name 'dbin';  procedure dbOut100(sear: string; var cd,nm,pnm: widestring);  stdcall;  external 'ProjectDLL.dll' name 'dbout';  procedure Add_dbPassword(Mot_de: string);  stdcall;  external 'ProjectDLL.dll' name 'Add_dbPasswords';  procedure dbDEL100(sear: string);  stdcall;  external 'ProjectDLL.dll' name 'DEL100'; //; var s1,s2,s3: widestring type  arryee1= array of widestring; //ansistring procedure dbTable100(var cont: integer; var arrya, arrya1,arrya2: arryee1);  stdcall;  external 'ProjectDLL.dll' name 'dbTab'; var  Form3: TForm3; implementation {$R *.dfm} procedure TForm3.Button2Click(Sender: TObject); begin  db100(Edit1.Text,Edit2.Text,Edit3.Text);  Edit1.Text:='';  Edit2.Text:='';  Edit3.Text:='';  Edit1.SetFocus; end; procedure TForm3.Button3Click(Sender: TObject); var  a,b,c: widestring ;  //            ansistring begin  dbOut100(Edit4.Text,a,b,c);  Edit1.Text:=a;  Edit2.Text:=b;  Edit3.Text:=c; end; procedure TForm3.Button4Click(Sender: TObject); begin Add_dbPassword(Edit5.Text); end; procedure TForm3.Button5Click(Sender: TObject); var  arrya00, arrya11,arrya22: arryee1;  cont12: integer;  i1: integer; begin StringGrid1.Cells[1,0] := 'الرقم'; StringGrid1.Cells[2,0] := 'الاسم'; StringGrid1.Cells[3,0] := 'اللفب'; Memo1.Lines.Clear; // if iii = 0 then dbTable100(cont12,arrya00, arrya11,arrya22); for i1 := 0 to 10 do begin  if i1 < cont12 then  begin   Memo1.Lines.Add(arrya00[i1]+'   '+arrya11[i1]+'  '+arrya22[i1]);   StringGrid1.RowCount := cont12+1;   StringGrid1.Cells[1,i1+1] := arrya00[i1];   StringGrid1.Cells[2,i1+1] := arrya11[i1];   StringGrid1.Cells[3,i1+1] := arrya22[i1];  end; end; end; procedure TForm3.Button6Click(Sender: TObject); begin  dbDEL100(Edit6.Text); end; end.
وعليكم السلام ورحمة الله وبركاته
لم اطلع على الملفات لكن يبدو انك لم تفهم جيدا ما قلته لك اخر مرة:
دلفي 7 وكل اصدارات دلفي ماقبل دلفي2009 تتعامل مع String كAnsiString
اما دلفي2009 وما فوق تتعامل مع String كWideString
http://delphi4arab.net/forum/showthread.php?tid=8855
السلام عليكم ورحمة الله وبركاته

نجحت هذه الفكرة مع القيمة النصية المرسلة الى ملف دي ال ال
ولم تنجح مع القيمة النصية التي تجلب من ملف دي ال ال
اقصد القيمة النصية التي تاتي من ماف دي ال ال وخصوصا اذا تكررت عملية جلب من ملف دي ال ال
تحدث اخطأ تتعلق بالذاكرة


استعملت String و AnsiString و WideString
ولم انجح في جلب من ملف دي ال ال

وفي اختلاف الاصدارات مثلا
Delphi7 و Delphi 10.2