2013-02-12 1 views
-1

Я запускаю небольшое приложение db с 2 TADOConnection на мой SQL Server. Первое подключение предназначено только для просмотра с использованием ADOTable, Datasource и DBNavigator. Второго соединения создаются во время выполнения, используя следующий кодИзменение базы данных, не распознанное ADO с использованием Delphi и SQL Server

aConnection:=TADOConnection.create(nil); 

aTable:= TADOTable.create(nil); 
aConnection.LoginPrompt := false; 

..... 
aTable.Edit; 

aTable.Insert; 

aTable.FieldByName(' ... ').AsInteger := .... ; 

aTable.FieldByName(' .... ').AsString := ... ; 

aTable.FieldByName(' .... ').AsString := ..... ; 

aTable.Post; 

aTable.active := false; 

aConnection.connected :=false; 

aTable.free; 

aConnection.free; 

Если я вставляю записи с этим кодом, я не могу видеть измененные данные, если нажать кнопку Update Навигатора. Мне нужно перезапустить мое приложение, чтобы увидеть все мои новые вставленные данные. Почему первое dbconnection, не признающее изменения, сделало мое второе соединение?

+4

очень просто не использовать 2 adoconnections ... – whosrdaddy

ответ

3

Попробуйте это, если я правильно отвечу, возникла проблема в старых Delphi/Adoverions с обновлением, которое не работает, как ожидалось, в то время как исправление выполнено.

procedure TForm2.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); 
begin 
    if Button = nbRefresh then 
    BEGIN 
    if Assigned(TDBNavigator(Sender).DataSource) then 
     if Assigned(TDBNavigator(Sender).DataSource.DataSet) then 
     if TDBNavigator(Sender).DataSource.DataSet is TCustomAdoDataset then 
      TADODataSet(TDBNavigator(Sender).DataSource.DataSet).Requery; 
    END; 
end; 
+0

это решение, решаемое проблемой, эта ошибка исчезла с XE3 & ADO? – user1769184

+0

Это ошибка ADO, у меня тоже была проблема с D7. – bummi

3

У вас есть Edit, а затем сразу Insert. Это означает, что ваше редактирование ничего не меняет (поэтому изменений не видно), и весь ваш код фактически обновляет вновь созданную строку. Другими словами, вы указываете базу данных, которую хотите изменить, используя Edit, сразу сообщите ей «Я хочу добавить новую строку» (это означает, что никакие данные не изменяются Edit), а затем изменяют значения в этом новом добавлении ряд. Вы также должны использовать один TADOConnection.

aTable.Edit; 

aTable.Insert; 

Просто удалите aTable.Insert;, и все должно быть в порядке.

// Change a row that already exists. 
aTable.Edit; 
aTable.FieldByName(' ... ').AsInteger := .... ; 
aTable.FieldByName(' .... ').AsString := ... ; 
aTable.FieldByName(' .... ').AsString := ..... ; 
aTable.Post; 

Основываясь на вашем комментарии к моему ответу, кажется, что вы хотите добавить новую строку. В этом случае просто используйте Insert без Edit (вставка новой строки автоматически переводит вас в режим изменения данных, вам не нужен отдельный вызов Edit).

aTable.Insert; 
aTable.FieldByName(' ... ').AsInteger := .... ; 
aTable.FieldByName(' .... ').AsString := ... ; 
aTable.FieldByName(' .... ').AsString := ..... ; 
aTable.Post; 

Edit изменяет текущую строку, в то время как Insert добавляет новую строку в текущей позиции (что может измениться после основан на индексе в эксплуатации) и Append добавляет новую строку в конец набора данных (опять же, это может измениться в зависимости от используемого индекса).

+0

если следовать вашему посоветуют никакой новая запись не будет вставлена ​​больше, а также первым сделать вставки и второй шаг таблица в режиме редактирования не помогли – user1769184

+1

Вы спросили о * * изменение ** данных, а не * добавление новой строки *. Если вы хотите добавить новую строку, удалите «Редактировать» и просто используйте «Вставить». –

+0

приведенный выше код находится во второй форме моего приложения. Я закрываю форму и все, что я нажимаю на dbnavigator в основной форме, изменения/новые вставленные записи не будут отображаться. Закройте приложение и начните снова ... отображаются записи. – user1769184

 Смежные вопросы

  • Нет связанных вопросов^_^