DP Delphi / Pascal  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Доступ к базам через FireDAC

Этот тест проверяет не память на названия, а способность разбирать код, видеть границы механизма и выбирать исправление, которое не ломает соседние сценарии. Внутри 25 вопросов, из них 15 с фрагментами Object Pascal. Отдельные результаты показываются по разделам: «Соединение с базой», «Запросы и наборы данных», «Параметры», «Транзакции» и «Контроль состояния».

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 70 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 25
В `FireDacConnection` сначала встречается `Conn := TFDConnection.Create(nil);`, а затем `finally Conn.Free; end;`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Соединение с базой
// Определите реальную гарантию в FireDacConnection.
program FireDacConnection;
{$APPTYPE CONSOLE}
uses FireDAC.Comp.Client, FireDAC.Phys.SQLite;
var
  Conn: TFDConnection;
begin
  Conn := TFDConnection.Create(nil);
  try
    Conn.Params.Values['DriverID'] := 'SQLite';
    Conn.Params.Values['Database'] := ':memory:';
    Conn.Connected := True;
  finally Conn.Free; end;
end.
Вопрос 2 из 25
В практическом сценарии по теме «Запросы и наборы данных» меняются входные данные и порядок действий. Какой вывод остаётся корректным?
Вопрос 3 из 25
Две реализации темы «Параметры» совпадают на обычном примере. Какое различие всё же меняет их договор?
Вопрос 4 из 25
Модуль, использующий тему «Транзакции», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 5 из 25
В теме «Контроль состояния» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 6 из 25
Реализацию темы «Соединение с базой» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 7 из 25
Обычный пример по теме «Запросы и наборы данных» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 8 из 25
Реализацию темы «Параметры» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться?
Вопрос 9 из 25
В теме «Транзакции» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 10 из 25
Почему `RefreshOrders` сначала проверяет `Q.State`, а затем отдельно ветвится по `Q.Active`?
PascalDelphi / Pascal · Контроль состояния
// Отделите правило языка от удачного запуска DatasetState.
program DatasetState;
{$APPTYPE CONSOLE}
uses FireDAC.Comp.Client, Data.DB;
procedure RefreshOrders(Q: TFDQuery);
begin
  if Q.State in dsEditModes then
    Q.Post;
  if Q.Active then
    Q.Refresh
  else
    Q.Open;
end;
begin end.
Вопрос 11 из 25
Какой сценарий по теме «Соединение с базой» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 12 из 25
Правка по теме «Запросы и наборы данных» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 13 из 25
Для темы «Параметры» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 14 из 25
Две версии `TransactionFlow` сохраняют порядок `Conn.StartTransaction;` → `Conn.Rollback;`. Какое свойство останется общим для обеих?
PascalDelphi / Pascal · Транзакции
// Определите реальную гарантию в TransactionFlow.
program TransactionFlow;
{$APPTYPE CONSOLE}
uses FireDAC.Comp.Client;
procedure Transfer(Conn: TFDConnection; A, B: Integer; Sum: Currency);
begin
  Conn.StartTransaction;
  try
    Conn.ExecSQL('update accounts set balance = balance - :s where id = :id', [Sum, A]);
    Conn.ExecSQL('update accounts set balance = balance + :s where id = :id', [Sum, B]);
    Conn.Commit;
  except
    if Conn.InTransaction then
      Conn.Rollback;
    raise;
  end;
end;
begin end.
Вопрос 15 из 25
Обычный пример по теме «Контроль состояния» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник?
Вопрос 16 из 25
Модуль, использующий тему «Соединение с базой», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 17 из 25
В теме «Запросы и наборы данных» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 18 из 25
Какой граничный результат следует ожидать в `SqlParameters`, когда после `Q.ParamByName('login').AsString := Login;` выполняется `Q.Open;`?
PascalDelphi / Pascal · Параметры
// Отделите правило языка от удачного запуска SqlParameters.
program SqlParameters;
{$APPTYPE CONSOLE}
uses FireDAC.Comp.Client;
procedure FindUser(Q: TFDQuery; const Login: string);
begin
  Q.SQL.Text := 'select id, name from users where login = :login';
  Q.ParamByName('login').AsString := Login;
  Q.Open;
end;
begin end.
Вопрос 19 из 25
Какой сценарий по теме «Транзакции» отличит исправную реализацию от версии со скрытым дефектом?
Вопрос 20 из 25
Правка по теме «Контроль состояния» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 21 из 25
Для темы «Соединение с базой» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 22 из 25
Какое наблюдение должен зафиксировать тест именно для последовательности `Q.ParamByName('now').AsDateTime := Now;` → `Q.ExecSQL;` в `QueryModes`?
PascalDelphi / Pascal · Запросы и наборы данных
// UPDATE выполняется через ExecSQL на настроенном соединении.
program QueryModes;
{$APPTYPE CONSOLE}
uses FireDAC.Comp.Client, FireDAC.Phys.SQLite, System.SysUtils;
var
  Conn: TFDConnection;
  Q: TFDQuery;
begin
  Conn := TFDConnection.Create(nil);
  Q := TFDQuery.Create(nil);
  try
    Conn.Params.Values['DriverID'] := 'SQLite';
    Conn.Params.Values['Database'] := ':memory:';
    Conn.Connected := True;
    Conn.ExecSQL('create table items (active integer, expires_at timestamp)');
    Conn.ExecSQL('insert into items values (1, :expires)', [Now - 1]);

    Q.Connection := Conn;
    Q.SQL.Text := 'update items set active = 0 where expires_at < :now';
    Q.ParamByName('now').AsDateTime := Now;
    Q.ExecSQL;
    Writeln(Q.RowsAffected);
  finally
    Q.Free;
    Conn.Free;
  end;
end.
Вопрос 23 из 25
Какое свойство темы «Параметры» становится решающим на граничном входе или при другом порядке действий?
Вопрос 24 из 25
Модуль, использующий тему «Транзакции», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре?
Вопрос 25 из 25
Какое свойство темы «Контроль состояния» становится решающим на граничном входе или при другом порядке действий?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу