Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi
Ön Sipariş Talebinde Bulunan Üyelerimiz
Sipariş Talebinde Bulunan Üyelerimiz

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
array den veri okuma
#1
Merhaba,

 ArrayOfkisiler = array of kisiler;  

 kisiler = class(TRemotable)
  private
    ftckimlikno: string;
    fadi: string;
    fsoyadi: string;
    fadresi: string;
  public
    destructor Destroy; override;
  published
    property KimlikNo:                string       read FtcKimlikNo write SetKimlikNo stored KimlikNo_Specified;
    property adi:                  string       read Fadi write Setadi stored adi_Specified;
    property soyadi:                   string        read Fsoyadi write Setsoyadi stored soyadi_Specified;
    property adresi:                     string     read Fadresi write Setadresi stored adresi_Specified;
  end;
Bu sekilde donen soap uniti mevcut.

Kendi projemin icerisinden
var kisiler : Arrayofkisiler;
seklinde tanimlama yapip verileri kisiler degiskenine atiyorum. Ama kisiler degiskenin icerisine atilan verileri okumayi basaramadim. Bunu nasil yapabilirim?
Cevapla
#2
mesela kisiler[0].KimlikNo ???

Siz öncesinde neler yaptınız, nasıl okumaya çalıştınız da hata aldınız? Nasıl bir hata aldınız?
There's no place like 127.0.0.1
WWW
Cevapla
#3
Soap Server tarafındaki kodunuzu ve Client tarafındaki kodunuzu da paylaşırsanız yardımcı olmaya çalışırız. Fakat buradaki eksik bilgi ile olasılıklar sıralanır.

Örnek olması adına Soap Server tarafında Interface unit
unit StockServiceIntf;
...
...
type
 TStockCard = class(TRemotable)
 private
   FStockCode: string;
   FStockName: string;
   FQuantity: Double;
   FUnitCode: string;
 published
   property StockCode: string read FStockCode write FStockCode;
   property StockName: string read FStockName write FStockName;
   property Quantity: Double read FQuantity write FQuantity;
   property UnitCode: string read FUnitCode write FUnitCode;
 end;

 TStockCards = array of TStockCard;


  IStockService = interface(IInvokable)
  ['{03D71547-FCF6-44A1-9FDE-D0CB0E7E0480}']
    function getStockQuantity(const pStockCode: string): TStockCard; stdcall;
    function getAllStockQuantity(): TStockCards; stdcall;

Soap Server tarafındaki Implementation unit
unit StockServiceImpl;

interface
...
type
 TStockReports = class(TInvokableClass, IStockService)
 public
   function getStockQuantity(const pStockCode: string): TStockCard; stdcall;
   function getAllStockQuantity(): TStockCards; stdcall;
 end;

implementation

function TStockReports.getAllStockQuantity: TStockCards;
var
 n1: Integer;
begin
 SetLength(Result, 0);
 DataModule1.conStock".Open;
 try
   DataModule1.fdqryMallar.SQL.Text := 'Veri tabanı sorgusu ile istediğin alanları getir';
   DataModule1.fdqryMallar.FetchOptions.Mode := fmAll;
   DataModule1.fdqryMallar.Open;
   DataModule1.fdqryMallar.First;

   SetLength(Result, DataModule1.fdqryMallar.RecordCount);
   n1 := 0;
   while not DataModule1.fdqryMallar.Eof do
   begin
     Result[n1] := TStockCard.Create;
     Result[n1].StockCode := DataModule1.fdqryMallar.Fields.Fields[0].AsString;
     Result[n1].StockName := DataModule1.fdqryMallar.Fields.Fields[1].AsString;
     Result[n1].Quantity := DataModule1.fdqryMallar.Fields.Fields[2].AsFloat;
     Result[n1].UnitCode := DataModule1.fdqryMallar.Fields.Fields[3].AsString;

     DataModule1.fdqryMallar.Next;
     Inc(n1);
   end;
 finally
   DataModule1.conStock.Close;
 end;
end;

function TStockReports.getStockQuantity(const pStockCode: string): TStockCard;
begin
 Result := TStockCard.Create;
 if pStockCode <> '' then
 begin
   DataModule1.conStock.Open;
   try
     DataModule1.fdqryMallar.SQL.Text := 'Select ile parametre olarak gelen kodun bilgilerini getir';
     DataModule1.fdqryMallar.Open;
     if not DataModule1.fdqryMallar.Fields.Fields[0].IsNull then
     begin
       Result.StockCode := DataModule1.fdqryMallar.Fields.Fields[0].AsString;
       Result.StockName := DataModule1.fdqryMallar.Fields.Fields[1].AsString;
       Result.Quantity := DataModule1.fdqryMallar.Fields.Fields[2].AsFloat;
       Result.UnitCode := DataModule1.fdqryMallar.Fields.Fields[3].AsString;
     end;
   finally
     DataModule1.conStock.Close;
   end;
 end
 else
   Exception.Create('Stok kodu olmadan bu fonksiyon kullanılamaz!');
end;


Burası Client tarafındaki kod blogudur
procedure TfrmMain.btn1Click(Sender: TObject);
var
 service: IStockService;
 val1: TStockCards;
 n1, vLen: Integer;
begin
 service := GetIStockService();
 val1 := service.getAllStockQuantity();

 strngrd1.Col := 4;
 strngrd1.Row := 2;

 vLen := Length(val1);
 strngrd1.RowCount := vLen;

 strngrd1.BeginUpdate;
 for n1 := 0 to vLen-1 do
 begin
   if Assigned(val1[n1]) then
   begin
     strngrd1.Cells[0,n1] := val1[n1].StockCode;
     strngrd1.Cells[1,n1] := val1[n1].StockName;
     strngrd1.Cells[2,n1] := val1[n1].Quantity.ToString;
     strngrd1.Cells[3,n1] := val1[n1].UnitCode;
   end;
 end;
 strngrd1.EndUpdate;
end;

Bu kodlara bakarak nasıl yazıldığını inceleyin. Size faydası olacaktır.
PostgreSQL - Linux - Delphi, Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
(05-11-2018, Saat: 13:07)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olmesela kisiler[0].KimlikNo ???

Siz öncesinde neler yaptınız, nasıl okumaya çalıştınız da hata aldınız? Nasıl bir hata aldınız?

Bunu defalarca denememe ragmen derleyici hata verip duruyordu. Simdi siz yazinca tekrar denedim sorunsuz calisti. Kusura bakmayin zamaninizi aldim.

(05-11-2018, Saat: 13:23)3ddark Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSoap Server tarafındaki kodunuzu ve Client tarafındaki kodunuzu da paylaşırsanız yardımcı olmaya çalışırız. Fakat buradaki eksik bilgi ile olasılıklar sıralanır.

Örnek olması adına Soap Server tarafında Interface unit
unit StockServiceIntf;
...
...
type
 TStockCard = class(TRemotable)
 private
   FStockCode: string;
   FStockName: string;
   FQuantity: Double;
   FUnitCode: string;
 published
   property StockCode: string read FStockCode write FStockCode;
   property StockName: string read FStockName write FStockName;
   property Quantity: Double read FQuantity write FQuantity;
   property UnitCode: string read FUnitCode write FUnitCode;
 end;

 TStockCards = array of TStockCard;


  IStockService = interface(IInvokable)
  ['{03D71547-FCF6-44A1-9FDE-D0CB0E7E0480}']
    function getStockQuantity(const pStockCode: string): TStockCard; stdcall;
    function getAllStockQuantity(): TStockCards; stdcall;

Soap Server tarafındaki Implementation unit
unit StockServiceImpl;

interface
...
type
 TStockReports = class(TInvokableClass, IStockService)
 public
   function getStockQuantity(const pStockCode: string): TStockCard; stdcall;
   function getAllStockQuantity(): TStockCards; stdcall;
 end;

implementation

function TStockReports.getAllStockQuantity: TStockCards;
var
 n1: Integer;
begin
 SetLength(Result, 0);
 DataModule1.conStock".Open;
 try
   DataModule1.fdqryMallar.SQL.Text := 'Veri tabanı sorgusu ile istediğin alanları getir';
   DataModule1.fdqryMallar.FetchOptions.Mode := fmAll;
   DataModule1.fdqryMallar.Open;
   DataModule1.fdqryMallar.First;

   SetLength(Result, DataModule1.fdqryMallar.RecordCount);
   n1 := 0;
   while not DataModule1.fdqryMallar.Eof do
   begin
     Result[n1] := TStockCard.Create;
     Result[n1].StockCode := DataModule1.fdqryMallar.Fields.Fields[0].AsString;
     Result[n1].StockName := DataModule1.fdqryMallar.Fields.Fields[1].AsString;
     Result[n1].Quantity := DataModule1.fdqryMallar.Fields.Fields[2].AsFloat;
     Result[n1].UnitCode := DataModule1.fdqryMallar.Fields.Fields[3].AsString;

     DataModule1.fdqryMallar.Next;
     Inc(n1);
   end;
 finally
   DataModule1.conStock.Close;
 end;
end;

function TStockReports.getStockQuantity(const pStockCode: string): TStockCard;
begin
 Result := TStockCard.Create;
 if pStockCode <> '' then
 begin
   DataModule1.conStock.Open;
   try
     DataModule1.fdqryMallar.SQL.Text := 'Select ile parametre olarak gelen kodun bilgilerini getir';
     DataModule1.fdqryMallar.Open;
     if not DataModule1.fdqryMallar.Fields.Fields[0].IsNull then
     begin
       Result.StockCode := DataModule1.fdqryMallar.Fields.Fields[0].AsString;
       Result.StockName := DataModule1.fdqryMallar.Fields.Fields[1].AsString;
       Result.Quantity := DataModule1.fdqryMallar.Fields.Fields[2].AsFloat;
       Result.UnitCode := DataModule1.fdqryMallar.Fields.Fields[3].AsString;
     end;
   finally
     DataModule1.conStock.Close;
   end;
 end
 else
   Exception.Create('Stok kodu olmadan bu fonksiyon kullanılamaz!');
end;


Burası Client tarafındaki kod blogudur
procedure TfrmMain.btn1Click(Sender: TObject);
var
 service: IStockService;
 val1: TStockCards;
 n1, vLen: Integer;
begin
 service := GetIStockService();
 val1 := service.getAllStockQuantity();

 strngrd1.Col := 4;
 strngrd1.Row := 2;

 vLen := Length(val1);
 strngrd1.RowCount := vLen;

 strngrd1.BeginUpdate;
 for n1 := 0 to vLen-1 do
 begin
   if Assigned(val1[n1]) then
   begin
     strngrd1.Cells[0,n1] := val1[n1].StockCode;
     strngrd1.Cells[1,n1] := val1[n1].StockName;
     strngrd1.Cells[2,n1] := val1[n1].Quantity.ToString;
     strngrd1.Cells[3,n1] := val1[n1].UnitCode;
   end;
 end;
 strngrd1.EndUpdate;
end;

Bu kodlara bakarak nasıl yazıldığını inceleyin. Size faydası olacaktır.

Elinize emeginize saglik.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Comporttan veri bittiğini nasıl anlarız ? seci20 11 264 21-10-2018, Saat: 17:54
Son Yorum: arsl01
  Unidac veri ekleme arsl01 3 167 29-09-2018, Saat: 17:06
Son Yorum: arsl01
  Delphi & FTP txt veri işleme Mr.Developer 21 719 28-09-2018, Saat: 08:21
Son Yorum: Fesih ARSLAN
  Veri Tabanı Bağlantı Yöntemi emrahgs 6 344 12-09-2018, Saat: 18:24
Son Yorum: emrahgs
  webden json okuma hatası arsl01 3 241 25-06-2018, Saat: 15:17
Son Yorum: arsl01



Konuyu Okuyanlar: 1 Ziyaretçi