Нужно ли выполнять запрос SELECT после выполнения запроса, чтобы изменить мои записи для просмотра измененных результатов? - PullRequest
2 голосов
/ 05 декабря 2011

Каждый раз, когда я выполняю запрос (INSERT, DELETE, UPDATE). После того, как мне нужно сделать Select * From Table, чтобы мою информацию можно было увидеть на элементе управления Grid?

Например:

UniQuery1 - это мой набор данных. Я использую элемент управления TDBADvListView.

   UniQuery1.Close;

   UniQuery1.SQL.Clear;

   SQL_QUERY:= 'insert into ListaCamiones(Tablilla,Marca,Modelo,Color) Values ('
  +QuotedStr(a1)+','+
   QuotedStr(a2)+','+
   QuotedStr(a3)+','+
   QuotedStr(a4)+')';

   UniQuery1.SQL.Text := SQL_QUERY;

   UniQuery1.Execute;

Нужно ли делать, Выбрать * Из списка ListaCamiones ; Так что я могу видеть информацию обратно на моем TDBADvListView?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

В общем, да, потому что, по моему опыту, когда вы вносите изменения в базу данных с помощью операторов SQL:

  1. ни один компонент базы данных не обновляет запрос автоматически,
  2. никакая база данных не может обновить данныев вашем приложении, когда данные изменились в базе данных.

Я рекомендую использовать отдельный компонент запроса (UniQuery2) для выполнения оператора SQL.Вы можете использовать метод ReQuery вашего запроса для повторного выполнения исходного запроса (UniQuery1).В зависимости от компонентов базы данных, которые вы используете, ваш локальный курсор может быть сброшен.

Также вы можете добавить / вставить, чтобы добавить записи, и изменить, чтобы изменить записи UniQuery1.Это исключает необходимость повторного выполнения исходного запроса, поскольку изменения добавляются в записи набора данных, буферизуемые локально компонентом Query.Но повторное выполнение запроса необходимо для получения записей, которые были добавлены / отредактированы другими пользователями с момента последнего выполнения запроса.

3 голосов
/ 05 декабря 2011

Ответ и да, и нет!

Да в том смысле, что вам нужно выполнить запрос SELECT снова, чтобы объединить измененный набор записей, нет в том, что вам не нужно выполнять запрос как отдельное выполнение.

Если вы добавите точку с запятой в конце строки запроса INSERT / UPDATE / DELETE и сразу же последуете по желаемому запросу SELECT , ваш вызов Execute одновременно обновит записи и объединит обновленный набор записей для отображения.

Кроме того, я бы тоже изменил способ построения вашей строки SQL!

const
  INSERT_QUERY_STRING = 'INSERT INTO ListaCaminoes(Tablilla, Marca, Modelo, Color) VALUES ("%s", "%s", "%s", "%s"); SELECT * FROM ListaCaminoes';

// Now inside your method
  UniQuery1.SQL.Text := Format(INSERT_QUERY_STRING, [a1, a2, a3, a4]);
  UniQuery1.Execute;

Надеюсь, это поможет!

0 голосов
/ 05 декабря 2011

Если вы только что вставили информацию в базу данных, вы уже получили ее!

В некоторых вариантах SQL (в mySQL я уверен) вы можете использовать команду "insert_id ()" из API, которая возвращает значение AUTO_INCREMENT - последнего вставленного набора данных.

Если вы просто хотите получить этот идентификатор, это путь (на mySQL, как я уже говорил), но если вы хотите получить другие данные, вам придется запросить его снова.В комбинированном запросе (например, опубликованном ранее) или в двух отдельных запросах.

Рад помочь!

...