Serwer Bazodanowy SQL w aplikacji

0

Dzień dobry!

Czy istnieje jakaś możliwość/kompononet/cokolwiek pozwalające uruchomić serwer bazodanowy z obsługą zapytań SQL w aplikacji w Delphi? Mam działającą apkę serwera TCP w Delphi. Chciałbym łączyć się do tegoż serwera swoim urządzeniem (urządzenie oparte o uC ATXMega) - to już działa - i przesyłać jakieś dane np. temperaturowe w celu zapisania ich w bazie danych. Następnie kiedyś tam będzie budowany serwis przeglądarkowy, który będzie chciał z tej bazy danych wyciągać dane i je wyświetlać, a więc najlepiej, żeby to obsługiwało SQL.

Pewnie najprostsze jest na tym serwerze TCP, który już działa, to zrobić, tylko jakie komponenty położyć, aby obsługiwać zapytania SQL?

Pozdrawiam!

0

to tak nie działa - chcesz mieć bazę danych to ją wybierz, ściągnij i uruchom. Delphi obsługuje większość dostępnych baz (jeśli brać pod uwagę ODBC i ADO to praktycznie wszystkie). Czy będziesz miał obsługę od razu czy trzeba będzie coś doinstalować to zależy od wersji Delphi jaką masz i tego jaką bazę wybierzesz.

0

Co do wersji to mam Rad Studio XE7 Enterprise.

No dobra. A co jeśli chciałbym po prostu na dysku utworzyć plik (użyć jakiejś funkcji(o ile istnieje) create_db) i czy w nim używając odpowiednich zapytań SQL dodawać tabele i rekordy? I potem sobie z tego odpowiednio wyciągać, bo obsługę tego, że moje urządzenie będzie słać dane do serwera, a serwer do tegoż pliku/bazy_danych zrobię sam.

0

To może zainteresujesz się ADO i BatchUpdate. Bo właśnie do tego typu zastosowań to służy.

1

Zrozum, że Delphi to jest narzędzie do tworzenia aplikacji a nie baza danych. Jeśli chcesz mieć możliwość zapisywania w jakiejkolwiek SQLowej bazie danych to trzeba sobie ją ściągnąć i zainstalować (ew. rozpakować). Delphi samo z siebie nie oferuje takiej funkcjonalności bo jest to zbędne. Delphi oferuje narzędzia dostępu do wielu różnych baz danych ale taką bazę trzeba mieć we własnym zakresie.

Bez bazy danych (ale i bez SQLa) to możesz sobie zapisywać w plikach - xml, txt, dbf, excel

0

Dziękuję za informację. Zrozumiałem. Czyli teraz pozstaje tylko sprawdzenie dokładnej licencji MySQL i może jakieś ewentualne dołączanie całego folderu serwera do aplikacji.

0

Nadal nie wiem, jak tu się odpowiada na komentarze. @abrakadaber, czy Tobie się znowu nie wydaje, że wiesz, o co pytasz?

0

Nie miałem zamiaru robić wojny. Ja tylko chciałem iść do domu. Ale spojrzałem za okno i ... skończyłem to, co miałem kończyć jutro i naskrobałem przykładzik.

Pomoc dla pytacza. Uruchamiamy Delphi, nowa aplikacja i w private formy wpisujemy trzy deklaracje, jak niżej. Potem wypełniamy OnCreate i OnClose - też jak niżej.

unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ADODB;

type
  TMyForm = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    MyTable: TADODataSet;
    MyDataSource: TDataSource;
    MyDBGrid: TDBGrid;
  public
    { Public declarations }
  end;

var
  MyForm: TMyForm;

implementation

{$R *.dfm}

procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  with TSaveDialog.Create(Self) do
  try
    Title := 'Zapisz jako ...';
    if Execute then
      MyTable.SaveToFile(FileName);
  finally
    Free;
  end;
  MyDBGrid.Free;
  MyDataSource.Free;
  MyTable.Free;
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
  MyTable := TADODataSet.Create(Self);
  with MyTable do
  begin
    Name := 'MyTable';
    LockType := ltBatchOptimistic;
    CommandType := cmdTable;
    with FieldDefs.AddFieldDef do
    begin
      Name := 'ID';
      DataType := ftAutoInc;
    end;
    with FieldDefs.AddFieldDef do
    begin
      Name := 'Opis';
      DataType := ftString;
      Size := 200;
    end;
    with FieldDefs.AddFieldDef do
    begin
      Name := 'Temperatura';
      DataType := ftCurrency;
    end;
    StoreDefs := True;
    CreateDataSet;
  end;

  MyDataSource := TDataSource.Create(Self);
  with MyDataSource do
  begin
    Name := 'MyDataSource';
    DataSet := MyTable;
  end;

  MyDBGrid := TDBGrid.Create(Self);
  with MyDBGrid do
  begin
    Name := 'MyDBGrid';
    Parent := Self;
    Align := alClient;
    DataSource := MyDataSource;
    TabOrder := 0;
  end;

  with TOpenDialog.Create(Self) do
  try
    Title := 'Otwórz uprzednio zapisane ...';
    if Execute then
      MyTable.LoadFromFile(FileName);
  finally
    Free;
  end;
end;

end.

No i serwer niepotrzebny. Mając tabelę o strukturze zgodnej z M$ SQL pracujemy bez serwera. Oczywiście odpada w zasadzie jakikolwiek bardziej złożony sql. No ale coś za coś. I jak poczytasz o BatchUpdate (a może UpdateBatch - teraz nie pamiętam), to dowiesz się, co można z tym zrobić dalej :-).

0

Poszukaj informacji nq temat SQLite :).

0

@Sadam2

Posłużę się przykładem i spróbuję coś napisać. Wygląda to dość sensownie. Odezwę się jak coś wypali... Tymczasem Dziękuję Tobie bardzo :)

0

Przepraszam. Nie byłem zalogowany. Dziękuję Ci jeszcze raz:)

0
Patrycjusz93 napisał(a):

Przepraszam. Nie byłem zalogowany. Dziękuję Ci jeszcze raz:)

Do @furious programming: Ale jak zacytować, nie będąc zalogowanym, komentarz?. Oto jest pytanie :-).

Do pytacza:
Szanowny Pytaczu, miej jednak na uwadze, że metoda ta jest w miarę dobra w takich sytuacjach, jak opisałeś - jedna tabela i w miarę niedużo wpisów. Przy dwóch tabelach już zaczynają się schody. I im więcej, tym gorzej. Wiem to z doświadczenia z bazami xBase. Tak więc zastanów się, jaką drogą pójdzie Twój projekt.

0

@abrakadaber napisał wczoraj, 22

Tak to ja sobie mogę i w DBFach zapisywać ale komfort żaden a o SQLu można zapomnieć.

W sumie od razu domyśliłem się, że chciałeś pisać o mORMocie, tylko, co mnie trochę dziwi :-), "jakoś Ci śmiałości zabrakło". No ale z drugiej strony sam przecież dobrze wiesz, że jeśli sytuacja jest taka, jak ją pytacz opisał, to byłaby to armata na wróble. A co do DBF, to jak sobie radziłeś z indeksowaniem i p-literkami? Ja musiałem mieć aplikację w Delphi, ale także starą, DOS'ową. A w DBF miałem mazovię. I w rezultacie kupiliśmy Advantage.

0

mORMot nawet mi tutaj przez myśl nie przeszedł :p. A co do armaty to tutaj FireBird byłby jak znalazł. Co do DBF to mam kupionego ApolloVCL - obsługuje NTX, CP852 i nie ma problemu z programami pisanymi w clipperze

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