Problem z TQuery

0

Używam TQuery do wybierania danych a bazy Postgres?a.
Po wykonaniu zapytania
select * from tabela
w wyniku dostaje tylko część kolumn z tabeli, i na złość nie te które potrzebuje. Na innych tabelach tej bazy chyba NIE MA tego problemu (jeszcze się nie ujawnił). Co ciekawe w wyniku zapytania są tylko kolumny tylu int4 a kolumn typu char(n) brak. Inna tabela także posiadają elementy typu int4 i char(n) działa poprawnie w zapytaniu.

Czy ktoś może wie co może powodować takie zachowanie się TQuery??

0

Nie używam Postgresa, ale moze zamiast gwiazdki użyj nazw kolumn, które chcesz wyświetlić. Ewentualnie poszukaj na forum - bo wydaje mi się, że był już ten temat poruszany

0

Rzeczywiście podobny błąd był opisywany na forum ale tam ten nie został rozwiązany w żaden mogący mi się przydać sposób.

Jednakże po wnikliwszym przeanalizowaniu problemu okazało się że TQuery nie wyświetla wszystkich kolumn znakowych, nawet przy użyciu w zapytaniu tylko nazw kolumn z danymi znakowymi w wyniku NIE MA oczekiwanego skutku.
Co ciekawe: jeżeli w właściwości SQL jest umieszczone zapytanie a komponent jest nie aktywny i użyje metody GetFieldNames to w wyniku dostane listę wszystkich interesujących mnie kolumn, ale już po aktywacji czyli po wykonaniu zapytania w wyniku działania zostają nazwy kolumn z danymi numerycznymi.

Jeszcze jedno urywając metody GetCurrentRecord(Buffer: PAnsiChar) pobieram pierwszy wiersz z TQuery i tam wszystkie dane wydają się być, wniosek TQuery ma jakiś problem z wyświetleniem tych danych.

0

to może najpierw byś napisał jak i jakimi komponentami łączysz się z postgresqlem

0

W Systemie jest zadeklarowany alias ODBC do bazy na serwerze. Komponenty które używam oprócz TQuery to TDatabase oraz TSession.

Dla Session1 ustawiam właściwości:

with Session1 do begin
  AutoSessionName:= False;
  Active:= True;
  SessionName:= 'Nazwa Sesji';
end;

Dla Database1 ustawiam właściwości:

with Database1 do begin
  AliasName:= 'PostgreSQL';
  DataBaseName:= 'PostgreSQL';
  Connected:= True;
  LoginPrompt:= False;
  Params:= 'podaje użytkownika i hasło';
  SessionName:= Session1.SessionName;
end;

Oczywiście TQuery używa tej samej sesji co Database1.

Query1.SessionName:= Session1.SessionName;
0

BDE odchodzi do lamusa. Z tego co mi wiadomo (też działam na postgresql) to najlepszymi komponentami (darmowymi) są ZeosLib. ODBC działa wolniej i lubi zrywać połączenie jeśli dłużej nie ma na nim ruchu

0

Po przezuceniu się na na komponentyZeosLib pomogło ale niestety nieubłaganie wzrusł rozmiar wynikowej aplikacji. A ten błąd w BDE jest także w Database Exploer i chba w łatwy sposób nie da się go obejść.

0
dj napisał(a)

Po przezuceniu się na na komponentyZeosLib pomogło ale niestety nieubłaganie wzrusł rozmiar wynikowej aplikacji. A ten błąd w BDE jest także w Database Exploer i chba w łatwy sposób nie da się go obejść.

a o jakie to niebotyczne rozmiary wzrósł rozmiar exeka?

0

przyrosts jest prawie dwukrotny z około 500kB do ponad 1MB

0

Witam szanownych forumowiczów, mam nadzieję że autor tematu się obrazi jak podepnę się do tematu i mam tez nadzieję że nie przeszkadza to nikomu że odświeżam temat.

Mój problem polega na zapisie obrazów jpeg w polu typu blob (dla postgresa bytea), próbuje zrealizować to poprzez:

procedure TForm1.BitBtn1Click(Sender: TObject);
 var  obraz: TMemoryStream;
begin
try
 obraz:=TMemoryStream.Create;
 Image1.Picture.Bitmap.SaveToStream(obraz);

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('insert into fotki (foto)values(:FOTO)');
  Query1.UnPrepare;
  Query1.ParamByName('FOTO').LoadFromStream(obraz,ftBlob);
  // lub 
  //   Query1.ParamByName('FOTO').SetBlobData(obraz.Memory,obraz.Size);
  Query1.Prepare;
  Query1.ExecSQL;

finally
obraz.Free;
end;
end;

W jednym jak i drugim przypadku przekazania przez parametr obrazu który ma być zapisany
program wykłada się z komunikatem ERROR: type "lo" does not exist'.
Dodam iż korzystam ze standardowych komponentów z zakładki BDE baza postgresql 8.1.
Proszę o sugestie i porady Pozdrawiam.

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