Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Access VBA

Автор: dneprcomp
Дата сообщения: 09.03.2008 03:25
LuckyELF
Любая стринговая переменная может хранить > 255.
Из приведенного кода видно, что sFind_SQL объявлена как variant.
Нет кода формирования строки sFind_SQL.
Зачем же приводить длинный и бесполезный код, не имеющий отношения к вопросу?
PS. В дальнейшем, если код действительно длинен, лучше его помещать между тегами
[no][more=Читать дальше..] Здесь код [/more][/no]
Автор: LuckyELF
Дата сообщения: 09.03.2008 15:12
Все там есть, вот код формирования sFind_SQL:

sFind_SQL = "SELECT T_CHECK.ID_CHECK, T_CHECK.ALT_NUMBER, R_CHECK_DIR.CHECK_DIR_NAME, " & _
"R_CHECK_TYPE.CHECK_TYPE_NAME, T_CHECK.BEG_PROV_PERIOD, T_CHECK.END_PROV_PERIOD, " & _
"T_CHECK.BEG_PROV_DATE, T_CHECK.END_PROV_DATE, T_CHECK.PRIKAZ_N, T_CHECK.PRIKAZ_DATE, " & _
"T_CHECK.INFO_DATE, T_CHECK.OUT_DATE " & _
"FROM R_CHECK_DIR INNER JOIN " & _
"(R_CHECK_TYPE INNER JOIN T_CHECK ON R_CHECK_TYPE.ID_CHECK_TYPE = T_CHECK.ID_CHECK_TYPE) " & _
"ON R_CHECK_DIR.ID_CHECK_DIR = T_CHECK.ID_CHECK_DIR " & _
"WHERE T_CHECK.ID_CHECK = " & sID_CHECK

Я делал объявления
Dim sFind_SQL as String
и
Dim sFind_SQL

разницы не увидел, в отладчике все равно строка не более 255 символов.

извините, спешил, поэтому код привел полностью.
Автор: dneprcomp
Дата сообщения: 09.03.2008 20:31
LuckyELF
Ну, извини. Не заметил. Видимо, я тоже поторопился Но и форматировать код надо несколько тщательнЕе.
Объяви sFind_SQL как стринг. Попробуй посмотреть в отладчике содержимое такой команды: sFind_SQL = String(500, "A")
Если длина стринга = 500 символам, то никаких ограничений на твоей машине нет.
Тогда можно попробовать следующее для решения проблемы:
Не конкатенировать всю строку за один раз. Разбить ее на несколько кусков.

Код: Dim strSelect as String
Dim strFrom as String
Dim strWhere as String

strSelect = "SELECT T_CHECK.ID_CHECK, T_CHECK.ALT_NUMBER," _
& "R_CHECK_DIR.CHECK_DIR_NAME, " & "R_CHECK_TYPE.CHECK_TYPE_NAME," _
& "T_CHECK.BEG_PROV_PERIOD, T_CHECK.END_PROV_PERIOD, " _
& "T_CHECK.BEG_PROV_DATE, T_CHECK.END_PROV_DATE, T_CHECK.PRIKAZ_N," _
& "T_CHECK.PRIKAZ_DATE, " & "T_CHECK.INFO_DATE, T_CHECK.OUT_DATE "

strFrom = "FROM R_CHECK_DIR INNER JOIN " _
& "(R_CHECK_TYPE INNER JOIN T_CHECK ON R_CHECK_TYPE.ID_CHECK_TYPE = " _
& "T_CHECK.ID_CHECK_TYPE) " & "ON R_CHECK_DIR.ID_CHECK_DIR = " _
& "T_CHECK.ID_CHECK_DIR "

strWhere = "WHERE T_CHECK.ID_CHECK = " & sID_CHECK

sFind_SQL = strSelect & strFrom & strFrom
Автор: LuckyELF
Дата сообщения: 10.03.2008 10:52

Цитата:
dneprcomp

Ты знаешь, я сначала попробовал по обычаю объявить ее как вариант - схватил ошибку, начал разбираться, выяснил что строка не вмещает весь скуэль скрипт, тогда я полез в справку, там вычитал, что есть 2 типа строк и что одна может хранить 64к а вторая 2^32, но как их объявить не сказано.

потом я попробовал sFind_SQL = String(64000, "A"), но в отладчике было по прежнему не более 255 символом.

выход я в итоге нашел, я написал запрос, сохранил его, и потом делал так:

select * from s_all_check where ...

но всеже решил выяснить, а можно ли хранить строчки более 255 символом, а то бывают ситуации, когда пишешь insert into ... и одно из полей, например адрес может быть символом 200, плюс остальной текст, в сумме будет за 300, которые благополучно обрезаются до 255, после чего сразу вылетает ошибка.

Длинну стринга я не проверяю, просто смотрю в отладчике, что строка сформировалась не полностью.
Автор: dneprcomp
Дата сообщения: 10.03.2008 19:49
LuckyELF
Стринговая переменная не имеет таких ограничений. У меня(Access 2003) твой запрос формируется без ошибки, полностью. Ограничение на длину до 255 есть только у некоторых контролов. Пробовал ли по моему способу?
Хотелося бы посмотреть то, что ты нашел в справке. Можешь указать по какому слову искал? Или сохранить в pdf?
Цитата:
Длинну стринга я не проверяю, просто смотрю в отладчике
Вот в отладчике и проверь, используя ?Len(strSelect)
BTW, каким способом проверяешь в отладчике? Просто смотришь, поместив курсор на переменную или используешь Debug.Print ?. Возможно, отладчик просто не показывает полностью.
Автор: MrZeRo
Дата сообщения: 11.03.2008 16:56
dneprcomp
По поводу строк хелп гласит (Справочник по языку Visual Basic - Data Types - String Data Type)

Цитата:

There are two kinds of strings: variable-length and fixed-length strings.
A variable-length string can contain up to approximately 2 billion (2^31) characters.
A fixed-length string can contain 1 to approximately 64K (2^16) characters.

но действительно ничего не говорится о том, как объявлять такие строки.
Вот что я нашел в других источниках:

Цитата:

Dynamic string variables contain character data of arbitrary length. Internally, each string variable uses four bytes that contain a handle number, which is used to identify and locate information about a string. Dynamic strings can contain up to approximately 2 Gb (2^31) characters. The type-specifier character for a dynamic string is: $.

Я понял, что если объявляется строка

Цитата:
DIM MyStr AS STRING * 10

то это статическая строка, а если

Цитата:
DIM MyStr AS STRING

то динамическая.
Автор: LuckyELF
Дата сообщения: 11.03.2008 19:10
У меня Access 2002 в состве OfficeXP. В редакторе я просто стал на слово String и нажал Ф1, вот что в итоге нашел:


Цитата:

String Data Type


There are two kinds of strings: variable-length and fixed-length strings.

A variable-length string can contain up to approximately 2 billion (2^31) characters.


A fixed-length string can contain 1 to approximately 64K (2^16) characters.
Note A Public fixed-length string can't be used in a class module.

The codes for String characters range from 0–255. The first 128 characters (0–127) of the character set correspond to the letters and symbols on a standard U.S. keyboard. These first 128 characters are the same as those defined by the ASCII character set. The second 128 characters (128–255) represent special characters, such as letters in international alphabets, accents, currency symbols, and fractions. The type-declaration character for String is the dollar sign ($).


По поводу длины, когда первый раз вылетела ошибка, я выбрал отладку, далее добавил строку переменную в отладку, потом скопировал ее содержимое в редактор фара, т.к. там мне полностью видно какой SQL код сформировался, там то собственно я и увидел, что строка немного коротковата.
Автор: dneprcomp
Дата сообщения: 11.03.2008 20:03
MrZeRo
С объявленим строк правильно понял Но ведь ограничения-то на длину нет.

LuckyELF
Разбивку по переменным сделал?
В отладчике тоже прекрасно все видно. Не стоит привлекать сторонние програмы, что бы не было слишком много возможностей ошибки. В отладчике набираешь знак ?переменная и жмешь Enter
Цитата:
The codes for String characters range from 0–255. The first 128 characters (0–127) of the character set correspond to the letters and symbols on a standard U.S. keyboard
Это не об ограничении длины. Это об Asci кодах.
Автор: dementiy111
Дата сообщения: 12.03.2008 13:17
Есть проблема. Кто знает как получить список всех таблиц в базе access и вывести его в поле со списком (выпадающий список) ?
Автор: Vitus_Bering
Дата сообщения: 12.03.2008 14:46
dementiy111
httр://forum.sources.ru/index.php?showtopic=40991
httр://sql.ru/forum/actualthread.aspx?bid=4&tid=205889&hl=
Автор: AndVGri
Дата сообщения: 13.03.2008 04:26
dementiy111

Код:
Public Sub DBTables()
Dim db As DAO.Database
Dim pTable As DAO.TableDef
Set db = Application.CurrentDb
For Each pTable In db.TableDefs
Debug.Print pTable.Name
Next pTable
End Sub
Автор: Palarm
Дата сообщения: 13.03.2008 16:22

Цитата:
Подскажите, где можно найти лит-ру по Access для "чаиника"

книги и ресурсы по Access
http://accessoft.ru/forum/index.php?s=233cee5fcd239f511dad4a88a25dedd5&showtopic=72
Автор: LuckyELF
Дата сообщения: 17.03.2008 18:19

Цитата:
dneprcomp


Благодарю за помощь, действительно ограничения на длинну строки нет, как в приниципе и не было ошибки, точнее она была, но в другом месте, а вылазило все именно в этом месте :-(

В общем-то это уже в прошлом, зато появились новые проблемы.

На форме есть ComboBox (ComboBox_ErrorType), привязанные к таблице R_ERROR_TYPE (ID, ERROR_TYPE). При открытии формы, обрабатывает событие Form_Open, в нем проверяется наличие переданного парамета, выполняется некоторый запрос и результаты полученные при выполнении запроса нужно выставить в ComboBox, но что-то ничего не получается.

Сначала я попробовал написать так:

Код: Me.ComboBox_ErrorType.Value = rs.Fields(3).Value
Автор: ab48
Дата сообщения: 18.03.2008 08:38
Помогите кто может, нужно скопировать файл с текущей датой создания или самый новый файл в папке, я написала батник, но не могу взять у файла дату создания (именно дату создания, без времени), как это сделать, может кто знает?

@echo on
setlocal enabledelayedexpansion
set "folder=d:\1\"
set "copy_to=d:\2\"
for %%a in (%folder%*.000) do (
set "file_d=%%~ta"
if "!file_d!"=="%DATE%" copy %%a %copy_to%
)

В file_d заносится дата и время создания файла, как из нее выцепить только дату?
Заранее огромное спс.
Автор: dmka
Дата сообщения: 18.03.2008 14:31
ab48
Одного не могу понять - причем тут Access?
Автор: Vitus_Bering
Дата сообщения: 18.03.2008 17:57
ab48
http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=11825&start=2020#lt
Автор: yellowair
Дата сообщения: 19.03.2008 14:21
привет всем, как я понял немного не тему, будет... но посещаемость хорошая. и ответ я думаю будет быстрым,
ситуация ms access 2003, есть 3 таблица (операции, накладная, номенклатура), так вот делаю запрос: типДок=1[покупка](т.Операции), товар(т.Номен...). кол-во.
у меня в таблице номенклатура 112 значений, а в запросе высвечивается только те по которым была покупка 91, как сделать так чтоб все 112 только кол-во у пустых =0

помогите...
Автор: yellowair
Дата сообщения: 20.03.2008 18:28
видимо помощи не дождаться мне никак.(((
Автор: AndVGri
Дата сообщения: 21.03.2008 00:55
yellowair
Приведи запрос по человечески в SQL, а так догадываться - экстрасенсов тут нет
Автор: sgal141
Дата сообщения: 27.03.2008 12:14
Есть две таблицы

1. Фамилия_Имя_Отчество учеников
с полями:
Фамилия
Имя
Отчество
№ зачетной книжки


2. Ведомость успеваемости учеников
с полями:
Фамилия
Имя
Отчество
№ зачетной книжки
предмет
оценка

Как сделать чтобы при заполнении поля Фамилия в таблице№2
автоматически заполнялись поля Имя, Отчество,№ зачетной книжки
в этой же таблице (в соответствии с фамилией), данные при этом
берутся из заполненой таблицы№1
Автор: InsideTM
Дата сообщения: 28.03.2008 11:52
Не имеет смысла. У тебя могут быть под одной фамилией куча народу. Ивановых, Петровых, Сидоровых. Можно упростить списками о которых я задавал вопрос двумя страницами ранее и мы его решили. Имхо.
Автор: sgal141
Дата сообщения: 28.03.2008 14:00
Есть две таблицы в Access

1. Фамилия_Имя_Отчество учеников
с полями:
Фамилия
Имя
Отчество
№ зачетной книжки


2. Ведомость успеваемости учеников
с полями:
Фамилия
Имя
Отчество
№ зачетной книжки
предмет
оценка

Как сделать чтобы при заполнении поля Фамилия в таблице№2
автоматически заполнялись поля Имя, Отчество,№ зачетной книжки
в этой же таблице (в соответствии с фамилией), данные при этом берутся из заполненой таблицы№1
Автор: TohaDub
Дата сообщения: 30.03.2008 20:30
А можно ли в поле MEMO запихать вордовский файл, или иной другой? Мне надо хранить файлы в базе accessa.
Автор: Vitus_Bering
Дата сообщения: 31.03.2008 09:52
TohaDub
В таблице тип данных поля установи "Поле объекта OLE".
Автор: Czechoslovak
Дата сообщения: 31.03.2008 09:53

Цитата:
А можно ли в поле MEMO запихать вордовский файл,

Не в Мемо а в OLE Object
Автор: dmention
Дата сообщения: 10.04.2008 08:16
Имеется БД на Access 2000. В базе есть кнопка, представляющая собой Гиперссылку на документ Word. Документ Word по средством слияния настроен на один запрос в данной базе.

БД перенесли вместе с документом Word на другой Сервер. Получилось так: Гиперссылка работает нормально, а при открытии документа Word он долго ищет старое месторасположение БД, в конце концов находит новое и нужные цифры в поля подставляет. Но, данная ситуация не является нормальной.

Если нажимаю кнопку адресаты слияни открывается запрос из которого должны браться данные.

Пытаюсь изменить источник данных в документе Word. Делаю выбрать Источник данных, нахожу БД, открываю файл БД и в списке Таблиц и запросов он дает мне все Таблицы и запросы БД, кроме того, который мне нужен. Видимо потому, что он уже прицеплен? Как мне с наименьшими потерями перестроить источник данных?
Чтобы поля, которых очень много, после изменения источника данных встали в теже места в документе Word.

Спасибо!


Автор: morg0th
Дата сообщения: 13.04.2008 00:20
что-то читал, читал, дабы не пробаянится вопросом, но так ничего мне нужного ненашел, поэтому прошу help:

у меня простенький движок на виндузовом сервере VBScript+Access. вначале, када увидел, на каком хостинге мне досталось работать, впал в кому на несколько дней, но потом слегка оклемался и уселся писать под мануал. написал почти весь функционал, что мне был нужен, но вот уже какой день серфю инет и немогу найти ответ на элементарный вопрос:

"КАК я могу средствами VBSvript+ADO создать новую таблицу в MS Access? без всяких "конструкторов" и проч. Тоесть скриптовым запросом. ?"

Подскажите, плз (:
Автор: AndVGri
Дата сообщения: 13.04.2008 03:10
morg0th
Через DAO вот так

Код:
Dim dbe, mdb, tbl, fld
Set dbe = WScript.CreateObject("DAO.DBEngine.36")
Set mdb = dbe.OpenDatabase("d:\temp\mybase.mdb")
Set tbl = mdb.CreateTableDef("MyTable")
Set fld = tbl.CreateField("ID", 4)
tbl.Fields.Append fld
tbl.Fields.Refresh
mdb.TableDefs.Append tbl
mdb.TableDefs.Refresh
Автор: serg562
Дата сообщения: 13.04.2008 14:41
Есть некая база. Простая до не могу. Город-Объект-Документ. Никаких цен, расчетов и т.п. В Городе может быть несколько объектов. Объект содержит несколько документов.
Создал три таблицы:
T_Gorod: id_gor - счетчик, Gorod -text.
T_Obj: id_obj - счетчик,id-gor - Num, Object - text, дальше несколько не значащих полей: No_Order, No_Arch, ingeneer.
T_Doc: id_doc - счетчик,id_obj - Num, Docum - text, дальше несколько не значащих полей: No_Order, No_Arch, Tip.
На каждую табл. создал отдельную форму (для добавления данных впоследствии)
Создал форму: в нее вставил:
Сombobox1: данные из T_Gorod.(поле со списком).
Подчиненую форму F_Obj(табличная). Данные из T_Obj.
Подчиненую форму F_Doc (табличная).Данные из T_Doc.
При выборе значения из combobox1 (например Лондон), в подчиненной форме F_Obj(табличная) отображаются только объекты, принадлежащие городу. Это сделал.
А вот там же сделать так, чтобы в подчиненной форме F_Doc отображались только документы,принадлежащие объекту -НЕ ПОЛУЧАЕТСЯ! Помогите в этом, а дальше я уж сам (кнопки, добавление, редактирование, удаление, выдача и возврат) думаю, что соображу.
Табичная форма для F_Obj не догма, а для F_Doc желательно
Автор: dmention
Дата сообщения: 14.04.2008 09:36

Цитата:
Имеется БД на Access 2000. В базе есть кнопка, представляющая собой Гиперссылку на документ Word. Документ Word по средством слияния настроен на один запрос в данной базе.

БД перенесли вместе с документом Word на другой Сервер. Получилось так: Гиперссылка работает нормально, а при открытии документа Word он долго ищет старое месторасположение БД, в конце концов находит новое и нужные цифры в поля подставляет. Но, данная ситуация не является нормальной.

Если нажимаю кнопку адресаты слияни открывается запрос из которого должны браться данные.

Пытаюсь изменить источник данных в документе Word. Делаю выбрать Источник данных, нахожу БД, открываю файл БД и в списке Таблиц и запросов он дает мне все Таблицы и запросы БД, кроме того, который мне нужен. Видимо потому, что он уже прицеплен? Как мне с наименьшими потерями перестроить источник данных?
Чтобы поля, которых очень много, после изменения источника данных встали в теже места в документе Word.

Спасибо!


Дополнительно, к вышезаданному вопросу еще сообщаю следующее.

Попробовал создать новый документ слияния и прицепить его к тому же запросу в БД. Так и в нем после выбора источника данных (БД), в списке таблиц и запросов не отображается необходимый мне запрос. Посмотрел внимательно, оказывается, НЕ ОТОБРАЖАЕТСЯ не только он один, но и многие другие. Чем они отличаются от тех которые отображаются понять не могу. Все запросы "Запросы на выборку".

Подскажите, пожалуйста, по какой причине некоторые запросы не отображаются в списке?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: BDE - траблы, помогите пожалуйста срочно...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.