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.
Wywołanie skryptów sql
- Rejestracja: dni
- Ostatnio: dni
- Postów: 297
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Zielona Góra
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:
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;
- Rejestracja: dni
- Ostatnio: dni
- Postów: 297
Eeeee. No trzeba przyznać, że luksus. Chyba trzeba będzie się przekonać do korzystania z tego całego AI.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1611
Nie zapomnij dodać kodu sprawdzającego czy przypadkiem obiekty/dane już nie istnieją aby tego przy każdym uruchomieniu nie odpalać
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1107
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.