Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > код + переход в форме по записям


Автор: Ринат 1.4.2005, 10:22
доброе утро! такой вопрос, при нажатии на кнопку в форме (активирует код) данные из списков (множественный выбор) записываются в таблицу, но данные их других полей этой же формы попадают в другую ячейку, то есть для данных, обрабатываемых нажатием кнопки создается своя запись в таблице
вопрос : как рещить данную проблему? вещать ли все элементы формы на скрипт, но тогда не будет ли так, что при переключении на следующую запись в таблицу не будет помещены 2 строки
спасибо

то есть как списки (кнокпу + код) привязать к данной записи, а не к отдельной
Добавлено @ 10:26
другими словами, есть ли такой вариант, можно ли код активировать при нажатии на кнопку переключения записи в форме? или как реализовать описанную выше задачу
Добавлено @ 10:31
не нахожу панели навигации в режиме редактирования формы, та что внизу обычно, переключение по записям

Автор: Akina 1.4.2005, 11:37
Вопрос совершенно непонятен.
Успокойся и объясни еще раз, без сумбура...

Автор: Ринат 1.4.2005, 11:43
при нажатии на кнопку выполняется код (код вставляет в таблицу данные из списков в форме, тот что вчера был), данные из формы заносятся в таблицу, при этом, данные не из списков (то есть эти поля код не обрабатывает), то есть данные из текстовых полей и т.д. попадают в таблицу как запись 1, а данные из списков (списки обрабатваются кодом) попадают в запись 2, то есть при одном заполнении формы, в таблице появляются 2 записи, вместо 1
как можно разрешить данную задачу?
1. можно ли код обрабатывающий списки, привязать к стандартным кнопкам (нопример переход по записи вперед, к сл записи)
вот такая проблема

Автор: Akina 1.4.2005, 11:47
Цитата
данные из текстовых полей и т.д. попадают в таблицу как запись 1, а данные из списков (списки обрабатваются кодом) попадают в запись 2

Значит неправильно делаешь. Вместо программного создания новой записи надо изменять данные в сцществующей записи.
Не INSERT INTO Table, а UPDATE Table SET Field="..."

Автор: Ринат 1.4.2005, 11:52
Код


strSQL = "UPDATE Table Fachbesucher SET Field (Thema, Ziele, Wirtschaftszweig, Aufgabenbereich) VALUES ('" & strTemp1 & "', '" & strTemp2 & "', '" & strTemp3 & "', '" & strTemp4 & "');"
DoCmd.RunSQL strSQL


такой синтаксис правильный

Добавлено @ 11:53
это в справке нашел
recordset.Update Fields, Values
record.Fields.Update
Добавлено @ 11:59
ошибку пишет
Код


strSQL = "UPDATE Table Fachbesucher SET Field (Thema, Ziele, Wirtschaftszweig, Aufgabenbereich) VALUES ('" & strTemp1 & "', '" & strTemp2 & "', '" & strTemp3 & "', '" & strTemp4 & "');"
DoCmd.RunSQL strSQL

Автор: Ринат 1.4.2005, 12:15
смотрю ман, спасибо за ответ!!!
Добавлено @ 12:22
написал запрос, выводит, что 0 полей актуализировано
Код

strSQL = "UPDATE Fachbesucher SET Thema ='" & strTemp1 & "', Ziele ='" & strTemp2 & "',Wirtschaftszweig ='" & strTemp3 & "',Aufgabenbereich='" & strTemp4 & "'"

DoCmd.RunSQL strSQL


Добавлено @ 12:24
то есть получается сл, в первую запись не вносит, когда заполняю 2 запись, потом нажимаю кнопку, и данные акутуализируются в первой записи (соответствующие поля во второй записи остаются пустыми), то есть актуализируется предыдущая запись, а не текущая

Автор: Ринат 1.4.2005, 12:32
попрубую сначала вставить пустые значения потом их обновить, все в одном коде
пробую
Добавлено @ 12:41
написал, результат тот же
вот код
Код

strSQL1 = "INSERT INTO Fachbesucher (Thema, Ziele, Wirtschaftszweig,Aufgabenbereich) VALUES ('""', '""', '""','""');"
strSQL = "UPDATE Fachbesucher SET Thema ='" & strTemp1 & "', Ziele ='" & strTemp2 & "',Wirtschaftszweig ='" & strTemp3 & "',Aufgabenbereich='" & strTemp4 & "'"
DoCmd.RunSQL strSQL1
DoCmd.RunSQL strSQL
End Sub

все же как граммотно сделать, чтобы данные из списков (списки обрабатываются кодом) попдали в одну запись с другими данными формы
спасибо!

Автор: Ринат 1.4.2005, 13:06
такой вариант тоже не проходит smile
Код

strSQL = "UPDATE Fachbesucher SET Thema ='" & strTemp1 & "', Ziele ='" & strTemp2 & "',Wirtschaftszweig ='" & strTemp3 & "',Aufgabenbereich='" & strTemp4 & "', WHERE id = id -1"


Автор: Ринат 1.4.2005, 14:20
и все же как? люди,, правда парюсь smile smile

Автор: Akina 1.4.2005, 14:27
Все, надоело.

У тебя форма на основе таблицы, в форме несколько текстовых полей, связанных с полями этой таблицы. Ты их заполняешь, и эти данные ложатся в таблицу. Новой записью.

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

Верно?

Автор: Ринат 1.4.2005, 14:29
да именно так

Автор: Ринат 1.4.2005, 14:40
просто идея моя такова, чтобы сравнить id, чтобы данные помещались в туже строку id которой указан в форме

Автор: Akina 1.4.2005, 14:55
Тогда включай мозги.

Когда происходит создание новой записи и занесение в нее данных из текстовых полей? Когда ты покидаешь эту запись и переходишь на другую. До того новой записи в БД просто не существует. А ты пытаешься в эту несуществующую запись затолкать программно данные из листбоксов. Есссно ни хрена не получается. И не получится.

Теперь что с этим делать.

1) Разделить таблицу на 2 таблицы - в одной оставить поля, которые заполняются через текстовые поля формы, во вторую вынести те, которые создаются программно. В первую добавить поле типа "Счетчик" и сделать его ключевым. Во вторую - поле типа "Длинное целое" - и его тоже сделать ключевым. Связать в схеме данных таблицы по этим полям, соотношение "один к одному".
2) На форму добавить скрытое поле счетчика из первой таблицы. Это для того, чтобы можно было легко получить номер для связи. Пока и так сойдет.
3) Теперь когда ты должен собирать контент из листбоксов, ты (как выше) добавляешь новую запись в таблицу 2. Но кроме собранных данных ты туда же заносишь и номер из скрытого поля счетчика:
Код

DoCMD.RunSQL "INSERT INTO Table2 (ID, Filed1, Field2, ...) VALUES (" & CounterTextBox.Value & ", " & DataFromListBox1 & ", " & DataFromListBox2 & ", " & ... & ")"

4) Когда же ты произведешь переход на другую запись - в таблицу 1 поступят данные из текстовых полей формы, в т.ч. и ключевое поле-счетчик, которое ты не даешь редактировать и которое имеет то же значение, что ты занес в таблицу 2. Записи немедленно связываются воедино.

Возможная проблема.

После занесения данных в таблицу 2 юзер может отказаться от записывания введенных данных, в результате чего в таблице 1 новая запись не образуется.
При следующем занесении записи в таблице 1 будет выдан тот же ID, и при программном выполнении запроса на пополнение таблицы 2 ты получишь ошибку повторения ключа.
поскольку зависшие в таблице 2 данные ни к чему не относятся, тебе придется отлавливать эту ошибку и (если она произошла) удалять эту запись, после чего повторять занесение новой записи:
Код

On Error Goto ErrorHandler
....
ErrorHandler:
If (Err.Number = Ошибка добавления записи в таблицу из-за повторения индекса) Then
    DoCMD.RunSQL "DELETE * FROM Table2 WHERE ID = " & CounterTextBox.Value & ";"
    Err.Clear
    Resume 0
End If


Автор: Ринат 1.4.2005, 15:51
СУПЕР! СДЕЛАЛ ! получилось! огромное спасибо !!! за готовое решение...спасибо!
супер вобще, все работает как часы....огромное спасибо! получилось!
еще раз спасибо за советы! очень помогло, и в принципе в голове некотрые вещи прояснились по БД

Автор: Akina 1.4.2005, 15:58
ок. позакрывай свои темы, по которым вопрос решен...

Автор: Ринат 1.4.2005, 16:09
а как , что-то не найду на форуме как закрыть тему? эти функции только модератор вроде имеет

Автор: Akina 1.4.2005, 16:16
опции модератора - закрыть тему. Работает и для автора темы.

Автор: Ринат 4.4.2005, 10:14
Цитата
2) На форму добавить скрытое поле счетчика из первой таблицы. Это для того, чтобы можно было легко получить номер для связи. Пока и так сойдет.


доброе утро! интересует фраза, "пока и так сойдет", а как еще можно? спасибо!

Автор: Akina 4.4.2005, 10:31
Цитата
а как еще можно?

а не скажу. если интересно - ищи возможные пути сам. их несколько (по крайней мере 4 точно есть только штатных). вот только зачем оно тебе?

Автор: Ринат 4.4.2005, 10:50
ok, спасибо smile) буду искать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)