Wątek zablokowany 2014-08-05 15:26 przez furious programming.

Jak załadować tabelę postgresql do Stringgrida

0

Witam

Od dłuższego czasu poszukuję procedury, która załadowałaby do Stringgrida dane z bazy danych ( tabeli ) typu postgresql. Chodzi głownie o połączenie Bazy danych ze Stringgridem. Proszę tylko nie proponować DBgrida. Jeżeli ma ktoś pomysł to bardzo proszę o przekazanie na forum. Dla przykładu podaję kod ładowania bazy MSAcess niestety nie jestem zainteresowany tą bazą. Ale jak komuś przyda się ta procedura to bardzo proszę.

procedure TForm1.Button1Click(Sender: TObject);
const
  InsertSQL = 'INSERT INTO Countries (Name) VALUES (?);';
var
  ID, r: Integer;
  NewCountryName: String;
  Stmt:
begin
  NewCountryName := '';
  if InputQuery('Insert', 'Enter new country name:', NewCountryName) then
    begin
      { Prepare a insert statement. }
      Stmt := FDatabase.Prepare16(InsertSQL);
     try
        { We bind all columns as strings. DISQLite3 will convert them to
          integers or floats as appropriate. }
       Stmt.Bind_Str16(1, NewCountryName);
        { Step once to execute statement and insert data. }
       Stmt.Step;
        { Retrieve the RowID of the newly inserted record. }
        ID := FDatabase.LastInsertRowID;

        { Add the new country to the StringGrid. Set the name only and
          leave other columns empty. }
       r := StringGrid.RowCount;
        StringGrid.RowCount := r + 1;
        SetGridRow(r, ID, NewCountryName);
        StringGrid.Row := r;
      finally
        Stmt.Free;
      end;
    end;
end;    

// wywołanie procedury pod battonem

LoadFromFD(StringGrid1, '.\CARS.MDB' , 'CARS');

A teraz o ile ktoś może podesłać procedurę wraz z wywołaniem będę bardzo wdzięczny. Proszę pamiętać o tym żeby dotyczyło Postgresql i Stringgrida.

Z góry dziękuję za pomoc.
Dłuższy

0

a w czym dokładnie masz problem? Czym się różni obsługa postgresa od accesa poza innymi komponentami?

0

Różnica jest zasadnicza. Ponieważ trzy silniki baz danych tj. MSAcess, SQLite, InterBase no i FReeBird posiadają jeden plik bazy danych. Pozostałe silnik baz danych są to bazy które takich plików nie posiadają i trzeba się do tych tabel odwoływać w odpowiedni sposób. DBgrid we właściwościach ma mechanizm łączenia się z tabelami. Stringgrid nie posiada tego mechanizmu. Trzeba zbudować go programowo, ale nigdzie nie mogłem tego znaleźć, a sam nie potrafię podłączyć choć szukam w literaturze w dokumentacji jak można to zrobić. Mam nadzieję że znajdzie się osoba który taki mechanizm zaimplementuje przyda się wszystkim. Chodzi o to żeby można było w dowolny sposób wyświetlać informację.

pozdrawiam
Dłuższy

0

Ojtam. Narzekasz ;)

chwila googlania i:

procedure TMainForm.BitBtnClick(Sender: TObject);
var
  i: integer;
begin
  MSQuery.Open;
  StringGrid.ColCount := MSQuery.FieldCount + 2; // two columns for additional data
  StringGrid.RowCount := MSQuery.RecordCount + 1;
  for i := 0 to MSQuery.FieldCount - 1 do
    StringGrid.Cells[i, 0] := MSQuery.Fields[i].FieldName;
  MSQuery.First;
  while not MSQuery.Eof do begin
    for i := 0 to MSQuery.FieldCount - 1 do
      StringGrid.Cells[i, MSQuery.RecNo] := MSQuery.Fields[i].AsString;
    MSQuery.Next;
  end;
end;

Gdzie MSQuery yo TMSQuery. Pewnie da się wymienić toto na bardziej uniwersalne.

1
dluzszy napisał(a):

Różnica jest zasadnicza. Ponieważ trzy silniki baz danych tj. MSAcess, SQLite, InterBase no i FReeBird posiadają jeden plik bazy danych. Pozostałe silnik baz danych są to bazy które takich plików nie posiadają i trzeba się do tych tabel odwoływać w odpowiedni sposób.

Ale co ty pieprzysz? Co kogokolwiek obchodzi w ilu plikach siedzi baza SQLowa skoro nie odwołujesz się do tych plików tylko do tabel poprzez SQLa?? Fizycznie nawet każdy wiersz może być w osobnym pliku a i tak nie zmienia to dla programisty filozofii i sposobu dostępu do danych! Wyjątkiem są bazy plikowe jak np. dbf ale nie o takich mówimy)
BTW nie MSAcess a MSAccess i nie FreeBird a FireBird - chociaż wypadało by wiedzieć jak nazywa się to o czym chcesz się powymądrzać.

DBgrid we właściwościach ma mechanizm łączenia się z tabelami. Stringgrid nie posiada tego mechanizmu. Trzeba zbudować go programowo, ale nigdzie nie mogłem tego znaleźć, a sam nie potrafię podłączyć choć szukam w literaturze w dokumentacji jak można to zrobić. Mam nadzieję że znajdzie się osoba który taki mechanizm zaimplementuje przyda się wszystkim. Chodzi o to żeby można było w dowolny sposób wyświetlać informację.
Dlatego DBGrid ma w nazwię DB (jak zresztą kilka innych komponentów) żeby nie trzeba było "budować programowo mechanizmu" tylko, żeby był od razu. To raz, dwa piszesz, że nie potrafisz a parę postów wcześniej dajesz przykład - no to jak przykład ci nie wystarcza to czego potrzebujesz?? Gotowca nie dostaniesz, przynajmniej nie ode mnie. BTW czego ci brakuje w DBGrid, a chciałbyś zrobić w StringGrid? Bo mam wrażenie, że poklikałeś chwilę i stwierdziłeś, że się nie da a wiedzę jak widać masz znikomą jak to działa.

0

Witam.

Bardzo dziękuję za przesłanie tego skryptu. Podziękowania kieruję dla Johnny_Bit. Krótka merytoryczna odpowiedź. Oczywiście procedurę dostosowałem do własnych potrzeb. Korzystam z komponentów FireDac.

Choć nie lubię tego robić tj. uciekać się do ocen personalnych. To odpowiem Panu Abrakadaber. Gdyby wszyscy ludzie wiedzieli wszystko, to byś kolego nie chodził do szkoły. A teraz zamiast klepać bzdury patrz i uczyć się jak kulturalni ludzie odpowiadają na prośby. Widać, że z kulturą u Ciebie jest kiepsko. Z wypowiedzi i tonu domniemuję, iż podobno dużo wiesz odpisując mi, że to ja mało wiem. Dla osób po podstawówce za zapewne taką ukończyłeś 2+2 = 4. Chyba nie trudno zgadnąć. A poważnie. Po to ludzie którym za to się płaci wymyślili internet, żeby ten kto chce pogłębiać swoją wiedzę, lub wręcz się nauczyć mogli z takich forów jak 4programmers korzystać. Mając dobre imię na uwadze i netykietę skończę opisywanie Twojego przypadku. Prośba, jak nie masz pojęcia jak odpowiedzieć na pytanie to po prostu nie wypowiadaj się i nie marnuj czasu innych jak również swojego. Jeszcze raz przepraszam wszystkich za moją wycieczkę osobistą, ale myślę że będziecie zgodni z moimi tezami. Które są proste jeśli ktoś zadaje pytanie na poziomie i uzasadnia że nie mógł znaleźć rozwiązania w necie i prosi o pomoc sam dając przykład rozwiązania jakiegoś problemu to chyba o to chodzi. A odpowiedzi typu - nic nie umiesz i nic nie wiesz są nie na miejscu. Logika mówi gdybym wiedział to bym pytań nie zadawał.

Pozdrowienia dla wszystkich i dla Ciebie Panie Abrakadaber również.

Dłuższy

P.S. Dwój wywód od DBgridzie panie Abrakadaber jest zbędny ponieważ gdybyś wczytał się w mój post to byś się dowiedział że ten poziom wiedzy mam opanowany. A skromność w życiu jest tak samo ważna jak milczenie. Jeśli jesteś w stanie czytać między wierszami skoczywszy podstawówkę bo tego tam też uczyli.

W jednym Pan Abrakadaber miał rację, że wkradły się literówki. Ale jak widać pisałem to późno w nocy przy 30 stopniowym upale. Z co przepraszam i dziękuję Panu za zwrócenie uwagi.

0

dla mnie EOT jeśli chodzi o ciebie. Jaką masz wiedzę to widać po twoich postach. Po nich też wyraźnie wiać, że szukasz jelenia, który czarno na białym, krok po kroku napisze ci wszystko co potrzebujesz - niestety nie na tym pomoc polega. Próbujesz być w dupę grzeczny aby inni zobaczyli jaki to z ciebie "kurturarny (pisownia zamierzona) dżentelmen" a zamiast tego wychodzi słoma z butów. Takich jak ty, którzy wszystko wiedzą najlepiej a trzech linijek kodu do kupy nie potrafią skleić było tutaj już od groma.

BTW z DBGridem można zrobić wszystko to co ze StringGridem a wiele z tych rzeczy można zrobić szybciej/prościej lub wręcz są już "na pokładzie" (oczywiście w kontekście bazy danych, bo czy szybciej będzie zrobić np. tabliczkę mnożenia na SG czy DBG to inna sprawa)

0

Bez komentarza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1