Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

сново Access VBA

159  
Herzog постоялец30.11.06 15:47
Herzog
NEW 30.11.06 15:47 
ситуация весьма тревиальная, но я с VBA не знаком - с Java работаю.
Есть Access 2003 DB и формуляры к нему с таблицами (т.е. отображение DB таблиц) куда можно заносить текстовую информацию.
От руки заносить информацию неудобно.
Для этого предусмотрена кнопка при нажатии на которую текстовая информация из Clipboard в формате с разделителем "табулятор" (\t)
переноситься в соответствующие поля таблицы (в формуляре, но не в DB. В DB информация записываеться при нажатии кнопки "save")
Пример
Текст:
123 абц бгф 345 ттт334 тзрех
453 565 546 555 56644 14564
Таблица:
|123|абц|бгф|345|ттт334|тзрех|
|453|565|546|555|56644 |14564|
Всем спасибо за помощь
#1 
Murr коренной житель30.11.06 15:55
Murr
NEW 30.11.06 15:55 
в ответ Herzog 30.11.06 15:47
Импорт (хоть и из клипборда) - единичная операция.
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.
Думаю, что надо заимпортить инфу в промежуточную таблицу и пикапить оттуда.
#2 
Herzog постоялец30.11.06 16:10
Herzog
NEW 30.11.06 16:10 
в ответ Murr 30.11.06 15:55
В ответ на:
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.

Нет. В клипборде уже сидит вся информация (всегда 4 строки (разделитель \n) и 5 столбцов (разделитель \t)).
Таблица в формуляре имеет 5 столбцов но в начальном состоянии имеет 1 строку (при заполнении в ручную текста в любой столбец сразу же автоматически добавляетъся дополнительная строка в таблице формуляра).
тоесть необходимо:

в цикле по строкам (i)
...вырезать строку (разделитель \n)
...в цикле по столбцам (j)
......вырезать столбец текста (разделитель \t)) из строки
......поместь его в столбец таблицы (i,j)
...конец цикла по столбцам (j)
конец цикла по строкам (i)
в VBA для Access 2003
#3 
Murr коренной житель30.11.06 16:32
Murr
NEW 30.11.06 16:32 
в ответ Herzog 30.11.06 16:10
всегда 4 строки и 5 столбцов
-----
Сколько _полей_ имеет таблица в базе - n+5 или n+4*5?
Если первый вариант, то тебе придется сохранять каждую строку отдельно - удерживать строку в режиме редактирования при переходе на следующую - весьма проблемно. Поэтому я бы сделал отдельную табличку, пихнул в нее записи и по сейву прописал как должно быть.
#4 
Herzog постоялец30.11.06 17:45
Herzog
NEW 30.11.06 17:45 
в ответ Murr 30.11.06 16:32
Таблица в базе имеет n строк и 5 столбцов.
Теория мне вообщем то понятна, мне нужен код (VBA) - какой-нибудь Beispiel.
#5 
Murr коренной житель30.11.06 19:27
Murr
NEW 30.11.06 19:27 
в ответ Herzog 30.11.06 17:45
Сорри, у меня на домашней машине Акксесса нет, а на работе... Завтра - точно времени не будет, в понедельник - скорее всего тоже. Если потерпишь до срединки след.недели - может смогу поглядеть.
#6 
Herzog постоялец01.12.06 09:22
Herzog
NEW 01.12.06 09:22 
в ответ Murr 30.11.06 19:27
Посмотри.
На выходных сам попробую залесть в дебри VBA
#7 
  scorpi_ nobody01.12.06 09:53
NEW 01.12.06 09:53 
в ответ Herzog 30.11.06 16:10
Я так и не понял, а в чём конкретно проблема? Вроде алгоритм ты расписал...
#8 
toptop знакомое лицо01.12.06 12:42
NEW 01.12.06 12:42 
в ответ Herzog 30.11.06 16:10
Разделитель строки на подстроки - сплит, только примера в помощи не ищи. На VB-страницах можно поискать типа vb-helper.com или vbarchiv.net
Примерно это может выглядеть так:
Dim subStr() As String, i As Integer
Dim rowStr() As String, j As Integer
subStr() = Split(strJAuelle, vbCR) 'есть еще константы vbLF или vbCRLF
For i = 0 To UBOUND(subStr)-1
rowStr() = Split(subStr(i), vbTab)
For j = 0 To UBOUND(rowStr)-1
Forms("Nazvanie formy")("Nazvanie jelementa").Teht = rowStr(j)
Neht j
Neht i
Что касается записи в поле, я нарисовал Forms("Название формы")("Название элемента").Техт - это нужно подправить в зависимости от того, как организована форма. Предполагаю, что элементы в форме не привязаны к полям (в связи с наличием кнопки Save), т.е. перенос информации осуществляется в функции, вызываемой при нажатии этой кнопки. Вполне возможно придется писать в RecordSet, но это другая песня.
Удачи.
#9 
Herzog постоялец05.12.06 09:41
Herzog
05.12.06 09:41 
в ответ scorpi_ 01.12.06 09:53
В том что я специалист по Java (J2EE, JSF ....), a VBA syntax мне незнаком.
#10 
Herzog постоялец05.12.06 09:41
Herzog
NEW 05.12.06 09:41 
в ответ toptop 01.12.06 12:42
Спасибо это как раз то что мне надо.
#11 
Simple Nothing is f*cked05.12.06 10:05
Simple
NEW 05.12.06 10:05 
в ответ Herzog 05.12.06 09:41
Пардон за офтоп.
В синтаксе VBA разобраться можно за полчаса, тем более, опытному девелоперу.
#12 
toptop знакомое лицо05.12.06 11:02
NEW 05.12.06 11:02 
в ответ Simple 05.12.06 10:05
Нет, девелопер сразу воткнется, почему а равно б, а c иногда не равно d.
а="15"
б=15
c="5.12"
d=5.12
Это же васик, тут такое бывает... Аж жжуть.
#13 
Murr коренной житель05.12.06 11:42
Murr
NEW 05.12.06 11:42 
в ответ Simple 05.12.06 10:05
Эээ... В синтаксисе - да, можно... но сделать, чтобы оно работало - это совсем другое...
К тому же у билли уж очень много вяких неявных заморочек... столько, что никто, даже работающий с этой какой постоянно, не знает их все...
#14 
Murr коренной житель05.12.06 11:43
Murr
NEW 05.12.06 11:43 
в ответ toptop 05.12.06 11:02
Это же васик, тут такое бывает... Аж жжуть.
------
Option Explicit - или смерть на третьей форме...
#15 
toptop знакомое лицо05.12.06 13:26
NEW 05.12.06 13:26 
в ответ Murr 05.12.06 11:43
В ответ на:
Option Explicit - или смерть на третьей форме...

А обязательная декларация переменных от неявного преобразования типов не спасает.
Такая требуха работает и с Option Explicit, и без.
Public Function sss()
Dim a As String
Dim b As Integer
Dim c As String
Dim d As Double
a = 15
b = "15"
c = 5.12
d = "5.12"
Debug.Print a = b, c = d
End Function
Возвращает Wahr Falsch.
#16 
Murr коренной житель05.12.06 14:00
Murr
NEW 05.12.06 14:00 
в ответ toptop 05.12.06 13:26
Я об том, что без явных деклараций там вообще можно вешаться.
Ну а неявного там... ой-ей-ей... Ну его нафиг, это Аксесс...
#17