Wywołanie skryptów sql

Wywołanie skryptów sql
BU
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 19 godzin
  • Postów:297
0

Witajcie ponownie,
Założenie: Aplikacja przy pierwszym uruchomieniu i podłączeniu się do bazy danych, musi założyć w tej bazie kilka tabel, oraz niektóre z nich wypełnić kilkuset rekordami.
Skrypt zakładający tabele nie jest mały. Pierwsza myśl, to zapisać wygenerować i zapisać skrypt w SQL Management Studio. Usunąć z niego wszystkie słowa kluczowe GO. Następnie wczytać go do TStringList. Linijka po linijce wstawiać do TADOCOmmand i to wywoływać. Ale to będzie jakiś czas trwało.
A czy Wy macie jakieś inne pomysły?
Używam komponentów dbGo.


Pozdrawiam
Buster
robertz68
  • Rejestracja:ponad 18 lat
  • Ostatnio:6 dni
  • Lokalizacja:Zielona Góra
0

nie używam dbgo tylko firedac i tam nic nie muszę usuwać z pliku skryptu. Po prostu tworzę go w SSMS i wczytuję TFDScript.
Ale zrobiłbym właśnie tak jak napisałeś.

Aż skusiło mnie i zapytałem sztucznej inteligencji jak to by zrobiła. Oto efekt (po wczytaniu do Delphi) i działa:

Kopiuj
procedure ExecuteSQLScript(const SQLScript: string);
var
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
begin
  // Create and configure the ADOConnection
  ADOConnection := TADOConnection.Create(nil);
  try
    ADOConnection.ConnectionString := 'string do połączenia';
    ADOConnection.LoginPrompt := False;
    ADOConnection.Connected := True;

    // Create and configure the ADOQuery
    ADOQuery := TADOQuery.Create(nil);
    try
      ADOQuery.Connection := ADOConnection;
      ADOQuery.SQL.Text := SQLScript;
      ADOQuery.ExecSQL;

    finally
      ADOQuery.Free;
    end;

  finally
    ADOConnection.Free;
  end;
end;

function LoadFileToString(const FileName: string): string;
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  try
    StringList.LoadFromFile(FileName);
    Result := StringList.Text;
  finally
    StringList.Free;
  end;
end;


procedure TForm1.btn1Click(Sender: TObject);
var
  FileContent: string;
begin
  begin
    try
      FileContent := LoadFileToString(ExtractFilePath(Application.ExeName) + 'skrypt.sql');
    except
      on E: Exception do
        Writeln('Error: ', E.Message);
    end;
  end;

  ExecuteSQLScript(FileContent);
end;


BU
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 19 godzin
  • Postów:297
0

Eeeee. No trzeba przyznać, że luksus. Chyba trzeba będzie się przekonać do korzystania z tego całego AI.


Pozdrawiam
Buster
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 20 godzin
  • Postów:1597
1

Nie zapomnij dodać kodu sprawdzającego czy przypadkiem obiekty/dane już nie istnieją aby tego przy każdym uruchomieniu nie odpalać

MY
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 21 godzin
  • Postów:1083
1
woolfik napisał(a):

Nie zapomnij dodać kodu sprawdzającego czy przypadkiem obiekty/dane już nie istnieją

A może jeszcze zapisać sobie po prostu wersję bazy danych w .. samej bazie danych? :D

Aktualizacji może być wiele. W przyszłości zapewne będą dochodzić kolejne. I Dobrze jest mieć listę update'ów z wersji na wersję i jak widzimy, że mamy wersję bazy 120, a aktualnie program oczekuje 128 to wykonujemy skrypty o numerach 121-128. Oczywiście coś takiego robimy przy każdym starcie aplikacji. Wtedy automatem wszystko się ładnie zaktualizuje.

woolfik
aż się flyway lub liqubase kłania :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.