Login
сново Access VBA
159
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|
Всем спасибо за помощь
Есть 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|
Всем спасибо за помощь
NEW 30.11.06 15:55
in Antwort Herzog 30.11.06 15:47
Импорт (хоть и из клипборда) - единичная операция.
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.
Думаю, что надо заимпортить инфу в промежуточную таблицу и пикапить оттуда.
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.
Думаю, что надо заимпортить инфу в промежуточную таблицу и пикапить оттуда.

NEW 30.11.06 16:10
Нет. В клипборде уже сидит вся информация (всегда 4 строки (разделитель \n) и 5 столбцов (разделитель \t)).
Таблица в формуляре имеет 5 столбцов но в начальном состоянии имеет 1 строку (при заполнении в ручную текста в любой столбец сразу же автоматически добавляетъся дополнительная строка в таблице формуляра).
тоесть необходимо:
в цикле по строкам (i)
...вырезать строку (разделитель \n)
...в цикле по столбцам (j)
......вырезать столбец текста (разделитель \t)) из строки
......поместь его в столбец таблицы (i,j)
...конец цикла по столбцам (j)
конец цикла по строкам (i)
в VBA для Access 2003
in Antwort Murr 30.11.06 15:55
В ответ на:
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.
А у тебя, судя по описанию, требуется проделывать ее несколько раз, причем получая разную инфу из клипборда.
Нет. В клипборде уже сидит вся информация (всегда 4 строки (разделитель \n) и 5 столбцов (разделитель \t)).
Таблица в формуляре имеет 5 столбцов но в начальном состоянии имеет 1 строку (при заполнении в ручную текста в любой столбец сразу же автоматически добавляетъся дополнительная строка в таблице формуляра).
тоесть необходимо:
в цикле по строкам (i)
...вырезать строку (разделитель \n)
...в цикле по столбцам (j)
......вырезать столбец текста (разделитель \t)) из строки
......поместь его в столбец таблицы (i,j)
...конец цикла по столбцам (j)
конец цикла по строкам (i)
в VBA для Access 2003
NEW 30.11.06 16:32
in Antwort Herzog 30.11.06 16:10
всегда 4 строки и 5 столбцов
-----
Сколько _полей_ имеет таблица в базе - n+5 или n+4*5?
Если первый вариант, то тебе придется сохранять каждую строку отдельно - удерживать строку в режиме редактирования при переходе на следующую - весьма проблемно. Поэтому я бы сделал отдельную табличку, пихнул в нее записи и по сейву прописал как должно быть.
-----
Сколько _полей_ имеет таблица в базе - n+5 или n+4*5?
Если первый вариант, то тебе придется сохранять каждую строку отдельно - удерживать строку в режиме редактирования при переходе на следующую - весьма проблемно. Поэтому я бы сделал отдельную табличку, пихнул в нее записи и по сейву прописал как должно быть.
NEW 30.11.06 17:45
in Antwort Murr 30.11.06 16:32
Таблица в базе имеет n строк и 5 столбцов.
Теория мне вообщем то понятна, мне нужен код (VBA) - какой-нибудь Beispiel.
Теория мне вообщем то понятна, мне нужен код (VBA) - какой-нибудь Beispiel.
NEW 30.11.06 19:27
in Antwort Herzog 30.11.06 17:45
Сорри, у меня на домашней машине Акксесса нет, а на работе... Завтра - точно времени не будет, в понедельник - скорее всего тоже.
Если потерпишь до срединки след.недели - может смогу поглядеть.


NEW 01.12.06 09:22
in Antwort Murr 30.11.06 19:27
NEW 01.12.06 09:53
in Antwort Herzog 30.11.06 16:10
Я так и не понял, а в чём конкретно проблема? Вроде алгоритм ты расписал...
NEW 01.12.06 12:42
in Antwort 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, но это другая песня.
Удачи.
Примерно это может выглядеть так:
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, но это другая песня.
Удачи.
NEW 05.12.06 09:41
in Antwort scorpi_ 01.12.06 09:53
В том что я специалист по Java (J2EE, JSF ....), a VBA syntax мне незнаком.
NEW 05.12.06 09:41
in Antwort toptop 01.12.06 12:42
NEW 05.12.06 10:05
in Antwort Herzog 05.12.06 09:41
NEW 05.12.06 11:02
in Antwort Simple 05.12.06 10:05
Нет, девелопер сразу воткнется, почему а равно б, а c иногда не равно d. 
а="15"
б=15
c="5.12"
d=5.12
Это же васик, тут такое бывает...
Аж жжуть.

а="15"
б=15
c="5.12"
d=5.12
Это же васик, тут такое бывает...

NEW 05.12.06 11:42
in Antwort Simple 05.12.06 10:05
Эээ... В синтаксисе - да, можно... но сделать, чтобы оно работало - это совсем другое...
К тому же у билли уж очень много вяких неявных заморочек... столько, что никто, даже работающий с этой какой постоянно, не знает их все...
К тому же у билли уж очень много вяких неявных заморочек... столько, что никто, даже работающий с этой какой постоянно, не знает их все...

NEW 05.12.06 11:43
in Antwort toptop 05.12.06 11:02
Это же васик, тут такое бывает... Аж жжуть.
------
Option Explicit - или смерть на третьей форме...
------
Option Explicit - или смерть на третьей форме...

NEW 05.12.06 13:26
А обязательная декларация переменных от неявного преобразования типов не спасает.
Такая требуха работает и с 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.
in Antwort Murr 05.12.06 11:43
В ответ на:
Option Explicit - или смерть на третьей форме...
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.
05.12.06 14:00
in Antwort toptop 05.12.06 13:26
Я об том, что без явных деклараций там вообще можно вешаться.
Ну а неявного там... ой-ей-ей... Ну его нафиг, это Аксесс...
Ну а неявного там... ой-ей-ей... Ну его нафиг, это Аксесс...
