Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2010, 14:27   #1
Lerein
Пользователь
 
Регистрация: 25.07.2010
Сообщений: 11
Вопрос Особое соединение столбцов

Здравствуйте, подскажите пожалуйста, каким способом можно соединить расположенные в таблице table1 столбцы f1 и f2, с одинаковым количеством строк, что бы каждая строчка из столбца f2 расположилась ниже соответствующей ей строчки из f1 ? В строках обоих столбцов хранятся десятичные числа, так же встречаются пустые строки.

P.S. Результат необязательно должен храниться в table1, утроит любая другая таблица/запрос.

P.S.2 Желателен код Visual Basic'a с комментариями.
Lerein вне форума Ответить с цитированием
Старый 25.07.2010, 18:17   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Lerein.
думаю Вас устроит подобная процедура: (дежавю)
Код:
Sub toTemporTable()
Const sQDel = "delete from TMP" '
Const sQAdd = "insert into TMP ( F1 ) values ( " '
Dim r As DAO.Recordset, s$
Set r = CurrentDb.OpenRecordset("select F1, F2 from table1")
'F1, F2, table1 имена полей и таблицы
CurrentDb.Execute sQDel ' очищение предварительно созданной таблицы
Do Until r.EOF
    'заполнение временной таблицы - результата
    s = Replace(Nz(r(0), 0), ",", ".")
    'функция Nz возвращает 0 при пустом (NULL) значении поля
    'десятичным разделителем значения рекордсета является запятая (по национальным установкам)
    'разделителем для SQL должна быть точка, победить "проблему" можно с применением функции Replace
    CurrentDb.Execute sQAdd + s + " )"
    s = Replace(Nz(r(1), 0), ",", ".")
    CurrentDb.Execute sQAdd + s + " )"
    r.MoveNext
Loop
r.Close
Set r = Nothing
End Sub
возможно "премудрости" с формирование новой таблицы не нужны и достаточно запроса:
Код:
SELECT F1 & chr(13) & chr(10) & F2
FROM table1
отображающего значения полей в две строки.?
Евгений.

P.S. может быть сейчас изменились правила преподавания, но прежде не называли поля и записи таблиц БД столбцами и строками .(?)

Последний раз редактировалось Teslenko_EA; 25.07.2010 в 18:38.
Teslenko_EA вне форума Ответить с цитированием
Старый 26.07.2010, 17:07   #3
Lerein
Пользователь
 
Регистрация: 25.07.2010
Сообщений: 11
По умолчанию

Евгений, спасибо за помощь, процедура полностью устроила, но хотелось бы узнать(на будущее), возможно ли дать ей возможность, соединять помимо числовых полей ( ), поля, с текстовыми значениями ? Спасибо за терпение
Lerein вне форума Ответить с цитированием
Старый 27.07.2010, 12:27   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Lerein.
"..соединять помимо числовых полей, поля, с текстовыми значениями ?.." конечно возможно, если поле итоговой таблицы текстовое. Но думаю стоит переделать конструкцию для использования двух рекордсетов:
Код:
Sub toTemporTable2()
Const sQDel = "delete from TMP" '
Dim r As DAO.Recordset, rs As DAO.Recordset
CurrentDb.Execute sQDel 'очищение предварительно созданной таблицы
'поле F1 таблицы TMP должно быть текстовым
Set r = CurrentDb.OpenRecordset("select F1, F2 from table1")
Set rs = CurrentDb.OpenRecordset("select F1 from TMP")
Do Until r.EOF
    rs.AddNew r(0): rs.Update
    rs.AddNew r(1): rs.Update
    r.MoveNext
Loop
r.Close: rs.Close
Set r = Nothing: Set r = Nothing
End Sub
это избавит от необходимости "готовить" (Replace(...)) текст содержащий значение. А если Вы добавите в таблицу TMP поле Счетчик, оно гарантирует возможность верной сортировки.
Успехов Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 28.07.2010, 17:38   #5
Lerein
Пользователь
 
Регистрация: 25.07.2010
Сообщений: 11
По умолчанию

Евгений, при попытке запуска выдает следующую ошибку:
Compile error:
Wrong number of arguments or invalid property assignment
Поле f1 таблицы ТМР было текстовым, все данные введены верно... Что я мог упустить ?
Lerein вне форума Ответить с цитированием
Старый 01.08.2010, 11:49   #6
Lerein
Пользователь
 
Регистрация: 25.07.2010
Сообщений: 11
По умолчанию

Евгений, вернитесь, прошу
Lerein вне форума Ответить с цитированием
Старый 01.08.2010, 20:52   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Lerein.
простите в код действительно закралась ошибка (очепятка ) исправьте пожалуйста
Код:
...
Do Until r.EOF
    rs.AddNew: rs(0) = r(0): rs.Update
    rs.AddNew: rs(0) = r(1): rs.Update
    r.MoveNext
Loop
...
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двухмерный массив из 20 столбцов. Вставить в него столбец из чисел 10 после всех четных столбцов. Дмитрий142 Помощь студентам 9 07.06.2012 19:32
Особое использование сетевого ресурса Серж123 Фриланс 5 25.12.2009 09:34
соединение двух столбцов, имеющих схожие данные из разных таблиц kate158 SQL, базы данных 3 11.09.2009 10:08
Особое условие для цикла Vikelf Помощь студентам 2 29.05.2009 08:01
Особое расположение формы delphicn Общие вопросы Delphi 0 02.02.2009 15:06