Delphiye SqlLite ile veri aktarımî

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gumiho309
Üye
Mesajlar: 35
Kayıt: 01 Eyl 2020 03:01

Delphiye SqlLite ile veri aktarımî

Mesaj gönderen Gumiho309 »

Merhaba, öncelikle dephide çok yeni olduğumu belirtmek isterim. FDCOnnection ile sqllite'tan csv dosyasini seçiyorum test ediyorum bağlantını başarılı olduğuni söylüyor sonrasında button'a kod yazıyorum ama hiç veri alamıyorum stringGrid'de. Aldıģim csv doysyasinda tablo var tabloda başlıklar bunu koda nasıl dökeceğimide bilmiyorum yani tablodaki verileri almak için başlıkları ayrı ayrı yazmam mı gerekiyor yoksa direk dosyayı çağırsam veri gelir mi? Bununla ilgili benzer kodları atan olursa örnek olması açısından çok iyi olur
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphiye SqlLite ile veri aktarımî

Mesaj gönderen sabanakman »

csv dosyası dediğimiz aslında alanlar belli bir karakterle ayıran metin dosyadan ibarettir. Bu yüzden hangi ayraç kullanılmış, yapısı ne bilmeden cevap verebilmek pek mümkün değil. O yüzden csv den örnek ilk 3 satır veya fazlasını görebilirsek belki dataset ile açacak bir yöntemi bulunur. Yalnız en kötü ihtimal satır satır bilgileri ayıklamak da başka bir yöntem olabilir. Aşağıda iki farklı yöntemle bilgelere hücre hücre erişme imkanı sağlanmaktadır.

Kod: Tümünü seç

var
  slTemp, slSatir: TStringList;
  i, j: Integer;

  asSatir: TArray<string>;
  sHucre, sAlan: string;
begin
  slTemp := TStringList.Create;
  slSatir := TStringList.Create;
  try
    slTemp.LoadFromFile('c:\yol\dosyaadi.csv');
    slSatir.QuoteChar := '"'; //alanlar " karakteri içinde değil ise #0 verilmeli
    slSatir.Delimiter := ';'; //alanlar birbirinde ; ile ayrılmışlarsa
    for i := 0 to slTemp.Count - 1 do
    begin
      //1. yöntem string split yöntemi
      asSatir := slTemp[i].Split([';']);
      for sHucre in asSatir do
      begin
        //sHucre değeri alanlara tek tek erişmeyi sağlar
        sAlan := sHucre;

        //eğer " karakterleri arasındaysa bu kodla ayıklama yapılabilir
        sAlan := sHucre.Substring(1, sHucre.Length - 2).Replace('""', '"');
      end;

      //2. yöntem TStrings DelimitedText özelliği
      slSatir.DelimitedText := slTemp[i];
      for j := 0 to slSatir.Count - 1 do
      begin
        //her slSatir[j] değerleri satırdaki alanlara tek tek erişmeyi sağlar
      end;
    end;
  finally
    slTemp.Free;
    slSatir.Free;
  end;
end;
Fakat başta da belirttiğim gibi. Dosya yapınızın önizlemesine bakmadan direkt tablo olarak açma imkanı sunmak biraz zor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Gumiho309
Üye
Mesajlar: 35
Kayıt: 01 Eyl 2020 03:01

Re: Delphiye SqlLite ile veri aktarımî

Mesaj gönderen Gumiho309 »

sabanakman yazdı: 04 Eyl 2020 12:05 csv dosyası dediğimiz aslında alanlar belli bir karakterle ayıran metin dosyadan ibarettir. Bu yüzden hangi ayraç kullanılmış, yapısı ne bilmeden cevap verebilmek pek mümkün değil. O yüzden csv den örnek ilk 3 satır veya fazlasını görebilirsek belki dataset ile açacak bir yöntemi bulunur. Yalnız en kötü ihtimal satır satır bilgileri ayıklamak da başka bir yöntem olabilir. Aşağıda iki farklı yöntemle bilgelere hücre hücre erişme imkanı sağlanmaktadır.

Kod: Tümünü seç

var
  slTemp, slSatir: TStringList;
  i, j: Integer;

  asSatir: TArray<string>;
  sHucre, sAlan: string;
begin
  slTemp := TStringList.Create;
  slSatir := TStringList.Create;
  try
    slTemp.LoadFromFile('c:\yol\dosyaadi.csv');
    slSatir.QuoteChar := '"'; //alanlar " karakteri içinde değil ise #0 verilmeli
    slSatir.Delimiter := ';'; //alanlar birbirinde ; ile ayrılmışlarsa
    for i := 0 to slTemp.Count - 1 do
    begin
      //1. yöntem string split yöntemi
      asSatir := slTemp[i].Split([';']);
      for sHucre in asSatir do
      begin
        //sHucre değeri alanlara tek tek erişmeyi sağlar
        sAlan := sHucre;

        //eğer " karakterleri arasındaysa bu kodla ayıklama yapılabilir
        sAlan := sHucre.Substring(1, sHucre.Length - 2).Replace('""', '"');
      end;

      //2. yöntem TStrings DelimitedText özelliği
      slSatir.DelimitedText := slTemp[i];
      for j := 0 to slSatir.Count - 1 do
      begin
        //her slSatir[j] değerleri satırdaki alanlara tek tek erişmeyi sağlar
      end;
    end;
  finally
    slTemp.Free;
    slSatir.Free;
  end;
end;
Fakat başta da belirttiğim gibi. Dosya yapınızın önizlemesine bakmadan direkt tablo olarak açma imkanı sunmak biraz zor.
csv dosyası virgül kullanılarak ayrılmış.Tabloda şu şekilde 3 sütündan oluşuyor: tarih, açıklama ve tutar .alt kısımlarda bilgiler yazıyor yaklaşık 100 satır. Datasetle daha kolay yapılma yolu varsa anlatabilirseniz çok iyi olur ya da attığınız kod ile yapsam mı daha kolay olur?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphiye SqlLite ile veri aktarımî

Mesaj gönderen sabanakman »

Mesela ADOConnection bileşeninin ConnectionString özelliğine (örneğindeki gibi)

Kod: Tümünü seç

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\KlasorAdi;Extended Properties="text;HDR=Yes;FMT=Delimited";Persist Security Info=False
verilirse o klasördeki csv dosyalarını ADOQuery ile aşağıdaki gibi SQL özelliğine yazılacak sorguyla almak mümkündür.

Kod: Tümünü seç

select * from deneme#csv
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Gumiho309
Üye
Mesajlar: 35
Kayıt: 01 Eyl 2020 03:01

Re: Delphiye SqlLite ile veri aktarımî

Mesaj gönderen Gumiho309 »

sabanakman yazdı: 04 Eyl 2020 04:36 Mesela ADOConnection bileşeninin ConnectionString özelliğine (örneğindeki gibi)

Kod: Tümünü seç

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\KlasorAdi;Extended Properties="text;HDR=Yes;FMT=Delimited";Persist Security Info=False
verilirse o klasördeki csv dosyalarını ADOQuery ile aşağıdaki gibi SQL özelliğine yazılacak sorguyla almak mümkündür.

Kod: Tümünü seç

select * from deneme#csv
Teşekkür ederim bilgiler için
Cevapla