Record string uzunluğu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Record string uzunluğu

Mesaj gönderen pairs »

Merhaba arkadaşlar

Kod: Tümünü seç

  TDB = record
      Key  : string[10];
      Name : ShortString;
  end;
böyle bi record oluşturdum fakat buradaki Name Kısmında string kısmı çok az oluyor ben büyük miktarda yazılar saklamak istiyorum
ne kullanmam gerekir acaba.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

ShortString, maksimum 255 karakter uzunluğunda string tutmak için tanımlanmıştır. Name'i string tanımlasanız?
There's no place like 127.0.0.1
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Tanımladıgım zaman bu seferde

_LDB : TDB;
_FDB : file of TDB;


buradaki _FDB için needs finalization diye bi hata veriyor dat dosyasına video dosyalarımın byte şeklinde yazmak istiyorum
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Proje dosyamı yollayabilirim isterseniz. Yapmak istediğim asıl maksat. Vİdeo dosyalarımın hepsini tek bir dosyaya gömüp oradan key isimleriyle çağırıp oynatmak stream edip direk oynatıyorum ama bunları gizleyip bi ortamda tutmak istiyorum. Belki başka bi fikirde verebilirsiniz.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

Kod: Tümünü seç

TDB = record
    Key  : string[10];
    Uzunluk: Integer;
    Data : array of byte;
end;
şeklinde bir yapı kullanılabilir. "Uzunluk" değeri Data'nın uzunluğu olur. Okurken önce Key, ardından Uzunluk okunur. Bunların yerleri belli olduğu için okumada sorun olmaz. Sonra "uzunluk" kadar daha "data" okunur.
There's no place like 127.0.0.1
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

CEvabınız için teekkürler bi deneyeyim hemen :D
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Merhaba verdiğiniz kodu denedim ama malesef yine aynı hatayı alıyorum.
örnek proje dosyasını versem inceleyebilirmisiinz yanlış birşeymi yapıyorum.

https://copy.com/FOBHDDSQPzqf7IdO
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

Maalesef verdiğiniz örneği incelemek için vaktim yok.
Bence sizin senaryo için TClientDataSet kullanabilirsiniz. Stream'i saklamak için Blob alan tanımlanabilir.
There's no place like 127.0.0.1
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

CLientDataset i bir deneyeyim. Bakayım işimi görücek gibi. Peki bu clientdataseti dışarı aktarabilirmiyim bi dosya gibi çünkü bir manager olacak birde player olacak.

Yani ikisi bir dosyadan haberleşsin diye datasetteki veriyi dışarı aktarabilirmiyim.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

ClientDataSet1.LoadFromFile
ClientDataSet1.SaveToFile
There's no place like 127.0.0.1
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Hocam süpersin tam istediğim gibi bir fikir verdiniz. Çok teşekkür ederim bu işimi görecektir rahatlıkla.Stream olarka ekleyebiliyormuşuz.

Bu blob tipindeyken size ını yazmam gerekiyormu sonkez onu sorayım. :D
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

Hayır gerekmez.
Buradaki StoreBlob ve RestoreFile procedure'lerini incelerseniz bir dosyayı nasıl Blob Field'a yükleyebileceğinizi ve Blob Field'dan dosyaya nasıl aktaracağınızı öğrenebilirsiniz.
There's no place like 127.0.0.1
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Hocam merhaba tekrardan rahatsız ediyorum.

Projeme Bir adet clientdataset bir adet dataprovider bir adette datasource ekliyorum ama nedense string olarak atadıgım alan dbgridde boş görünüyor ama cds dosyasını not defteri açtıgımda ise veriler görünüyor.

Tam olarak clientdataset ile tüm kaynaklara baktım ama nedense görünmüyor. Delphi xe7 sürümünü kullanıyorum bundan kaynaklanabilirmi. Yada field alanını string değilde başka bi tip mi yapmam gerekiyor. Blob alanda zaten outof memory hatası veriyor nedense. 400mb lara geldiği zaman.
pairs
Üye
Mesajlar: 43
Kayıt: 12 Nis 2014 07:52

Re: Record string uzunluğu

Mesaj gönderen pairs »

Kullandığım kod yapısı şu şekilde.

Kod: Tümünü seç

TThread.CreateAnonymousThread(
procedure
var
    FLD : TBlobField;
    ss : TMemoryStream;
    _FileStream : TFileStream;
  I: Integer;
begin
        ClientDataSet1.CreateDataSet;
        ClientDataSet1.SaveToFile(GetCurrentDir + '\veriler.cds');
        ClientDataSet1.Open;
        try
          W7ProgressBar1.Max := sFileList.Count;
            for I := 0 to sFileList.Count-1 do
            begin
                ClientDataSet1.LoadFromFile(GetCurrentDir + '\veriler.cds');
                ClientDataSet1.Insert;
                ClientDataSet1.FieldByName('ISIM').AsString := sFileList[I];  // --> errormessage (field not found)
                Label1.Caption := sFileList[I];
                TBlobField(ClientDataSet1.FieldByName('FILE')).LoadFromFile(sFileList[I]);
                ClientDataSet1.SaveToFile(GetCurrentDir + '\veriler.cds',dfBinary);
                W7ProgressBar1.Position := I+1;
            end;
                ClientDataSet1.Close;
            except on E: Exception do
        ShowMessage(E.Message);
        end;
        ClientDataSet1.Active := false;
        ShowMessage('Bitti');
end ).Start;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Record string uzunluğu

Mesaj gönderen SimaWB »

CreateDataSet yapmadan önce Field tanımlarını yapmıyorsanız "field not found" hatası almanız normal.
Tanımlamaları çalışma zamanında yapmak istiyorsanız;

Kod: Tümünü seç

with ClientDataSet1.FieldDefs do
begin
   Clear;
   with AddFieldDef do
   begin
       Name := 'ISIM';
       DataType := ftString;
       Size := 10;
   end;
   with AddFieldDef do
   begin
       Name := 'FILE';
       DataType := ftBlob;
   end;
end;
There's no place like 127.0.0.1
Cevapla