Problem z wyświetlaniem w DBGirdzie

0

Poczytałem i chcę wykonać wyświetlanie w DBgirdzie wybranej tabeli połączenie mam poprawnie skonfigurowane i w comboboxie wyświetlają mi się nazwy tabeli które baza zawiera

Wstawiłem cztery elementy na formę

SQLConnection1
SQLDataSet1
DataSource1
DBGird

ustawiłem ich właściwości następująco

SQLConnection1 <- SQLDataSet1 <- DataSource1 <- DBGird

połączenie z bazą realizuję następująco

</image> ```delphi procedure TForm1.Button1Click(Sender: TObject);

var
Connection: TSQLConnection; // przypisanie nazwy
connSTR : string; // zdefiniowanie typu zmiennej
begin

  Connection := TSQLConnection.Create(nil);

  Connection.LoginPrompt := false;  // niepokazuj okienka logowania

  try

  Connection.DriverName := 'dbxmysql';                  //
  Connection.GetDriverFunc := 'getSQLDriverMYSQL50';    //
  Connection.LibraryName := 'dbxopenmysql50.dll';       //  podmiana biblioteki
  Connection.VendorLib := 'libmysql.dll';               //
  Connection.Params.Append('Database='+Form2.Edit4.text);
  Connection.Params.Append('User_Name='+Form2.Edit1.text);
  Connection.Params.Append('Password='+Form2.Edit2.text);
  Connection.Params.Append('HostName='+Form2.Edit5.text);

  Connection.Open;       // OTWÓRZ  PŁĄCZENIE



  Button2.Enabled := True;    // uaktywnij przycisk




  ComboBox1.Text :=  'Połączono wybierz tabele';
  Connection.ConnectionName:=ConnStr; // konwersja danych tekstowych
  Connection.GetTableNames(ComboBox1.Items,false); // wyswietl nazwy tabel w ComboBoxie
  except
  raise Exception.Create('Nie można ustanowić połączenia');  // jesli niemozna sie polaczyc wyswietl komunikat
  end;

  Connection.Free;   // zwolnij polaczenie

end;

Nazwy tabel z bazy wyświetlają mi się w combo boxsie i działa to poprawnie 


Do dodatkowo utworzonego buttona wpisuje

```delphi
procedure TForm1.Button3Click(Sender: TObject);
begin
SQLConnection1.DriverName := 'dbxmysql';                  //
SQLConnection1.GetDriverFunc := 'getSQLDriverMYSQL50';    //
SQLConnection1.LibraryName := 'dbxopenmysql50.dll';       //  podmiana biblioteki
SQLConnection1.VendorLib := 'libmysql.dll';
SQLDataSet1.Active := true;

i właśnie po połączeniu się i wykonaniu procedury wyskakuje mi błąd

Missing Database property :(

już nie wiem jak to ugryźć

w pole command text w SQLDataSet1 wpisałem "select * from tabela"

Ponieważ chodzi mi o wyświetlenie zawartości tej tabeli o nazwie tabela

0
  1. SQLConnection1 nie ma ustawionych parametrów
      Connection.Params.Append('Database='+Form2.Edit4.text);
      Connection.Params.Append('User_Name='+Form2.Edit1.text);
      Connection.Params.Append('Password='+Form2.Edit2.text);
      Connection.Params.Append('HostName='+Form2.Edit5.text);

i dlatego wyskakuje Ci błąd.

  1. Po co tworzysz dynamicznie connect-a w "Button1Click" skoro masz go dostępnego na formie. Wykorzystaj tego co masz na formie i do niego podpisz parametry połączenia.

  2. Nie wiem o co Ci chodzi z "ConnStr" . Tam nic nie ma !!

  3. zamiast przeładowywać biblioteki, zmień zapytanie SQL podstawiając do "select from" nazwę tabeli z comboxa.

  4. nie napisałeś w którym dokładnie momencie wyskakuje Ci ten błąd.

0
blue_17 napisał(a)

SQLConnection1 <- SQLDataSet1 <- DataSource1 <- DBGird

Strzelam: SQLConnection -> SQLDataSet -> DataSetProvider -> ClientDataSet -> DataSource -> DBGrid

0

Świetnie kolega strzela ale dopiero teraz zrobiłem w ten sposób :)

Zrobiłem następujące połączenie

SQLConnection1 -> DataSetProvider -> ClientDataSet -> DataSource -> DBGird

wszystko typowo połączyłem tylko ClientDataSet trzeba było podłączyć wybierając DataSetProvider w polu ProviderName

w button wpisałem

SQLConnection1.DriverName := 'dbxmysql';                  //
SQLConnection1.GetDriverFunc := 'getSQLDriverMYSQL50';    //
SQLConnection1.LibraryName := 'dbxopenmysql50.dll';       //  podmiana biblioteki
SQLConnection1.VendorLib := 'libmysql.dll';
SQLConnection1.Connected := true;
sqlConnection1.LoginPrompt := false;  // niepokazuj okienka logowania

ClientDataSet1.Active := true;
SQLDataSet1.Active := true;

Początek musiałem taki zastosować bo się rzucało znowu o bibliotekę libmysql.dll

Prawie doszedłem do sukcesu i wyskoczył mi błąd że nie może znaleźć następnej biblioteki Midas.dll

Więc zagoglowałem i znalazłem odpowiedź co trzeba było zrobić

Do modułu uses dodałem MidasLib

Ale wyświetlają mi się tylko nazwy kolumn bez danych i teraz właśnie nie wiem jak zrobić aby wyświetlało mi wszystko

0

już sobie poradziłem skorzystałem ze sugestii kolegi ale jedno mnie naprawde nurtuje oprogramowałem zdarzenie AfterPost komponentu ClientDataSet i niedziała poprawnie

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);
begin

ClientDataSet1.ApplyUpdates(-1); // umozliwiaj edycje na siatce

end;

Pomimo że na siatce DBGrida wprowadzam zmiany nie zawsze zmiany się zapisują w bazie nie wiem co może być przyczyną :?:

Prosił bym o jakieś sugestie

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