Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Копирование строки из списка в таблицу.
 
 автор: red88888   (30.11.2008 в 15:53)   личное сообщение
 
 

Есть форма. На ней Listbox. Нужно сделать так, чтобы выделенная строка в listbox'е (по нажатию кнопки или двойным кликом на строке) записывалась в пустую таблицу. Поля в таблице и списке совпадают. Подскажите пожалуйста как сделать?
Заранее спасибо!

  Ответить  
 
 автор: Lukas   (30.11.2008 в 15:58)   личное сообщение
 
 

Каков источник строк Listbox-а ?

  Ответить  
 
 автор: red88888   (30.11.2008 в 17:07)   личное сообщение
 
 

Выбираются SQL-запросом из таблички. Посредством изменения свойства RowSource.

  Ответить  
 
 автор: Lukas   (30.11.2008 в 17:12)   личное сообщение
 
 

В таком случае, запросом на добавление добавляем запись в новую таблицу, выбрав запись из источника данных ListBox-а с выборкой(фильтром) по значению ListBox-а.

  Ответить  
 
 автор: red88888   (30.11.2008 в 18:06)   личное сообщение
 
 

Эммм, а можно по шагам, как это делается? А то я в СУБД новичок
Спасибо за помощь!

  Ответить  
 
 автор: Lukas   (30.11.2008 в 18:15)   личное сообщение
 
 

Ответ на вопрос автора о том, нельзя ли это сделать проще:

Проще только заплатить специалисту, который все сделает правильно, чтобы небыло необходимости копировать данные из одной таблицы в другую.

  Ответить  
 
 автор: red88888   (30.11.2008 в 18:20)   личное сообщение
 
 

Я вообще курсовой делаю, так что мне оптимизировать особо не надо. К тому же данные из этой таблицы (в которую копируется) удаляются после печати отчета и таблица становится пустой. Поэтому об избыточности заботится не надо =)

Не бросайте на полпути, опишите пожалуйста, как это делается

  Ответить  
 
 автор: alecks_lp   (30.11.2008 в 18:39)   личное сообщение
 
 

за что уважаю курсовые? - за конкретность задания. Тупо по пунктам исполнил - оптимизировать ничего не надо. Ах, да... и не забудь с собой ден@ги

  Ответить  
 
 автор: red88888   (30.11.2008 в 18:40)   личное сообщение
 
 

Скажите, какое свойство содержит в себе выделенную строку в listbox'е

  Ответить  
 
 автор: Lukas   (30.11.2008 в 18:46)   личное сообщение
 
 

Если список с одиночным выбором- Value - значение списка (BoundColumn)
Используя Column(Индекс) можно получить данные всех столбцов ListBox.

  Ответить  
 
 автор: red88888   (30.11.2008 в 19:05)   личное сообщение
 
 

Я чего-то не понимаю. У меня есть список (динамически меняется). В нем несколько столбцов. Один из них ID (идент. товара). Так вот, мне нужно сделать, чтобы при двойном клике по строке в списке, выбирался этот ID и по нему уже составлялся запрос на добавление в таблицу. Как сэто осуществить? Если не трудно, напишите код плиз или ссылочку дайте на пример похожий.

Я просто не пойму, какое свойство содержит в себе значение стоблца ID выделенной строки? И куда писать запрос? Ну не в RowSource же...

  Ответить  
 
 автор: Lukas   (30.11.2008 в 19:12)   личное сообщение
 
 

Как только вы выбираете строку в списке, значение списка принимает значение столбца BoundColumn выбранной записи списка.

И куда писать запрос?

А на этот вопрос ответить сложнее, но не "на деревню дедушке" это точно.

  Ответить  
 
 автор: Lukas   (30.11.2008 в 19:16)   личное сообщение
 
 

Вариант 1. Сформировать строку SQL запроса в коде VBA.
Вариант 2. Предварительно создать запрос в конструкторе запросов и сохранить.
В обоих случаях выполнить запрос на добавление.

  Ответить  
 
 автор: red88888   (30.11.2008 в 19:45)   личное сообщение
 
 

Ага, значит, как я понял, BoundColumn содержит в себе номер столбца, откуда берутся данные для Value? Тогда все понятно...
Т.е. мне надо делать выборку по Список2.Value! Вот это я и хотел узнать, большое спасибо...

Теперь осталось узнать, как сделать выборку. Запрос написать несложно, но мне надо понять, куда его вставлять. При создании списка запрос пишется в свойство RowSource, чтобы отображались данные в Listbox. А чтобы он выполнился при двойном нажатии, куда его вставлять?

Я так понимаю влоб писать нельзя

Private Sub Список2_DblClick(Cancel As Integer)
insert into ......
End Sub

Надо какому-то свойству присваивать, но какому?

  Ответить  
 
 автор: Lukas   (30.11.2008 в 19:59)   личное сообщение
 
 

Создаем запрос в конструкторе запросов:

INSERT INTO tblName (имена полей через запятую) SELECT ..поля которые нам нужны через запятую...FROM tbl2Name WHERE ID=Forms![Имя формы]![ListName]

Сохраняем запрос. Остается его выполнить на двойной клик по списку:

Private Sub List_DblClick(Cancel As Integer)
Либо DoCmd.RunSQL ИмяЗапроса
либо CurrentDb.Execute ИмяЗапроса
End Sub

  Ответить  
 
 автор: red88888   (30.11.2008 в 20:43)   личное сообщение
 
 

Большое спасибо! Запрос работает, только вот не получается вставить его в код.
Запрос получился тако:
 INSERT INTO Текущий_заказ ( Название, Цена_розн, Цена_5, Цена_10, Цена_15, Гарантия, Категория_товара )
SELECT Название, Цена_розн, Цена_5, Цена_10, Цена_15, Гарантия, Категория_товара
FROM Товары
WHERE IDg=Формы!Форма_заказа!Список2; 


При запуске запроса просит ввести Формы!Форма_заказа!Список2 . Я ввожу IDg, которое мне надо и все прекрасно вставляется.

А когда пишу в коде
Private Sub Список2_DblClick(Cancel As Integer)
DoCmd.RunSQL Купить
End Sub


Выдает ошибку:
Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'. (Ошибка 3129)

Запрос называется КУПИТЬ

Что я не так делаю?

  Ответить  
 
 автор: red88888   (30.11.2008 в 20:49)   личное сообщение
 
 

Все, огромнейшее спасибо! Все работает. Вставил SQL-запрос прямо в код и все заработало. Еще раз огромное спасибо!!!!

  Ответить  
 
 автор: alecks_lp   (30.11.2008 в 19:14)   личное сообщение
 
 

а Вы выложите то что уже наваяли

  Ответить  
 
 автор: red88888   (30.11.2008 в 19:47)   личное сообщение
 
 

Я думаю, Вы там ничего не поймете, т.к. делалось все методом тыка и понимающему человеку понять будет невозможно =)

  Ответить  
 
 автор: shaucha   (02.12.2008 в 12:28)   личное сообщение
 
 

Однажды имел глупость помочь знакомой с курсовой.
Она получила незачет и кучу проблем.
Хотя задание было выполнено по пунктам и правильно.

  Ответить  
 
 автор: Мюллер   (02.12.2008 в 13:29)   личное сообщение
 
 

Ну нужно ж иногда и думать, что подсказываешь Вряд ли студент в состоянии сделать решение с использованием пользовательских классов и API функций.
Один знакомый рассказывал ( а он пловец-разрядник ), что пошел сдавать экзамен по плаванию в институт физкультуры, вместо своего друга. ( друг почти не умел плавать). Так вот по результатм сдачи экзамена, его друга тут же зачислили в сборную по плаванию.

  Ответить  
 
 автор: Lukas   (02.12.2008 в 13:41)   личное сообщение
 
 

Любому преподавателю достаточно ткнуть пальцем в строчку кода и спросить: "А это что и зачем".
И даже если ты пытался писать "под студента", а студент не смог ответить на вопрос, то незачет все-равно гарантирован. (Правда есть варианты, но это уже другая история).
Вопрос в том, что преподаватели сами "халтурят" - пишут студентам рефераты, и им конкуренция не нужна.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList