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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2011, 09:58   #1
Vit2010
 
Регистрация: 21.08.2011
Сообщений: 6
По умолчанию Ограничение на длину строки

Имеется следующая проблема:
Создаю строку SQL в VBA в Access 2010. Все нормально, пока результирующая строка не превышает 255 символов. Но дальше оператор типа strSQL=strSQL & "строка" вроде бы выполняется, но результирующая строка остается без изменений. В результате SQL запрос при выполнении выдает ошибку, т. к. не хватает данных для заполнения полей таблицы. Подскажите, что делать в таких случаях, есть ли возможность обойти это ограничение? Заранее спасибо
Vit2010 вне форума Ответить с цитированием
Старый 21.08.2011, 11:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрел на эту тему на очень авторитетном сайте sql.ru

Там грамотные люди говорят, что никакого ограничения в 255/256 символов для запроса нет.

И ещё, один из авторов сделал предположение,
что ошибка у Вас такая:
вопрос Q37
Цитата:
Q37: Получаю ошибку при запуске запроса на выборку (select) при помощи команды Execute либо RunSql.

A: Эти команды предназначены только для запуска исполняемых запросов (добавление, обновление, удаление и т.д.). Запрос на выборку нельзя запустить. Им можно пользоваться только (приблизительно) как таблицей: открыть его на экране, открыть на нем рекордсет, посадить на него форму и т.д.
или, другими словами:
Цитата:
В отличие же от запроса на выборку, запрос типа SELECT ... INTO ... - это запрос на создание таблицы с данными, он данных не возвращает, это Executable (исполняемый) запрос - и именно поэтому его можно запустить через RunSql или метод CurrentDb.Execute.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.08.2011, 12:01   #3
Vit2010
 
Регистрация: 21.08.2011
Сообщений: 6
По умолчанию Уточняю !

Привожу более подробный листинг !

strSQL = "INSERT INTO Patients ( Last_Name, First_Name, Second_Name, Initials, "
strSQL = strSQL & "Birthday, Nom_St, Srok_years, Srok_Month, Srok_Days, "
strSQL = strSQL & "Start_Srok, End_Srok, Rezgim, InClinic)"
strSQL = strSQL & " VALUES ("
strSQL = strSQL & Chr(34) & Sirname.Value & Chr(34) & ", "
strSQL = strSQL & Chr(34) & First_Name.Value & Chr(34) & ", "
strSQL = strSQL & Chr(34) & Second_Name.Value & Chr(34) & ", "
strSQL = strSQL & Chr(34) & Initials.Value & Chr(34) & ", "
strSQL = strSQL & "#" & Month(Birthday.Value) & "/" & Day(Birthday.Value) & _
"/" & Year(Birthday.Value) & "#" & ", "
strSQL = strSQL & Chr(34) & Nom_St.Value & Chr(34) & ", "
strSQL = strSQL & Srok_years.Value & ", "
strSQL = strSQL & Srok_Month.Value & ", "
strSQL = strSQL & Srok_Days.Value & ", "
strSQL = strSQL & "#" & Month(Start_Srok.Value) & "/" & Day(Start_Srok.Value) & _
"/" & Year(Start_Srok.Value) & "#, "
strSQL = strSQL & "#" & Month(End_Srok.Value) & "/" & Day(End_Srok.Value) & _
"/" & Year(End_Srok.Value) & "#" & ", "
strSQL = strSQL & Chr(34) & Rezgim.Value & Chr(34) & ", "
strSQL = strSQL & "[" & InClinic.Value & "]);"
myRecset.Open strSQL, myConn, adOpenKeyset, adLockOptimistic

Так вот, примерно до строки, выделенной курсивом все нормально, но дальнейшая конкатенация строк не выполняется, следовательно и при выполнении myRecset.Open имеем ошибку - в строке SQL нет данных для последних полей таблицы. Просматриваю strSQL в отладчике - она обрезана на 250-256 символе!
Vit2010 вне форума Ответить с цитированием
Старый 21.08.2011, 14:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

как объявлена strSQL ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.08.2011, 16:51   #5
Vit2010
 
Регистрация: 21.08.2011
Сообщений: 6
По умолчанию

Пробовал и Dim strSQL As String и Dim strSQL As Variant
Vit2010 вне форума Ответить с цитированием
Старый 24.08.2011, 16:19   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию кавычки в строке запроса

Код:
Sub a110824_1602()
Dim strsql
strsql = "INSERT INTO Patients ( Last_Name, First_Name, Second_Name, Initials, "
strsql = strsql & "Birthday, Nom_St, Srok_years, Srok_Month, Srok_Days, "
strsql = strsql & "Start_Srok, End_Srok, Rezgim, InClinic)"
strsql = strsql & " VALUES ("
strsql = strsql & Chr(34) & 1 & Chr(34) & ", "
strsql = strsql & Chr(34) & 2 & Chr(34) & ", "
strsql = strsql & Chr(34) & 3 & Chr(34) & ", "
strsql = strsql & Chr(34) & 4 & Chr(34) & ", "
strsql = strsql & "#" & Month(5) & "/" & Day(6) & _
"/" & Year(7) & "#" & ", "
strsql = strsql & Chr(34) & 822 & Chr(34) & ", "
strsql = strsql & 11 & ", "
strsql = strsql & 12 & ", "
strsql = strsql & 13 & ", "
strsql = strsql & "#" & Month(14) & "/" & Day(15) & _
"/" & Year(16) & "#, "
strsql = strsql & "#" & Month(21) & "/" & Day(22) & _
"/" & Year(23) & "#" & ", "
strsql = strsql & Chr(34) & 2422 & Chr(34) & ", "
strsql = strsql & "[" & 25 & "]);"
Debug.Print Len(strsql), strsql
''заменила ваши поля на константы, так как не знаю их тип
''261          INSERT INTO Patients ( Last_Name, First_Name, Second_Name, Initials, Birthday,
''Nom_St, Srok_years, Srok_Month, Srok_Days, Start_Srok, End_Srok, Rezgim, InClinic)
''VALUES ("1", "2", "3", "4", #1/5/1900#, "822", 11, 12, 13, #1/14/1900#, #1/21/1900#, "2422", [25]);
''''''''''''и что такое в квадратных скобках в последней строке------------------------------------
''мои предположения
''--в одном из ваших полей есть кавычка
''--либо замените двойные кавычки на одинарные
''---или каждая кавычка в строке должна быть ДВОЙНОЙ
''----------------------м м м м м м м---------------

End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание

Последний раз редактировалось shanemac51; 24.08.2011 в 16:22.
shanemac51 вне форума Ответить с цитированием
Старый 28.08.2011, 08:59   #7
Vit2010
 
Регистрация: 21.08.2011
Сообщений: 6
По умолчанию

Еще уточнение !

Код:
strSQL = "INSERT INTO Patients ( Last_Name, First_Name, Second_Name, Initials, "
strSQL = strSQL & "Birthday, Nom_St, Srok_years, Srok_Month, Srok_Days, "
strSQL = strSQL & "Start_Srok, End_Srok, Rezgim, InClinic)"
strSQL = strSQL & " VALUES ("
strSQL = strSQL & Chr(34) & Sirname.Value & Chr(34) & ", "          'тип поля: String
strSQL = strSQL & Chr(34) & First_Name.Value & Chr(34) & ", "      'тип поля: String
strSQL = strSQL & Chr(34) & Second_Name.Value & Chr(34) & ", "  'тип поля: String
strSQL = strSQL & Chr(34) & Initials.Value & Chr(34) & ", "            'тип поля: String
strSQL = strSQL & "#" & Month(Birthday.Value) & "/" & Day(Birthday.Value) & _     'тип поля: String
"/" & Year(Birthday.Value) & "#" & ", "
strSQL = strSQL & Chr(34) & Nom_St.Value & Chr(34) & ", "           'тип поля: String
strSQL = strSQL & Srok_years.Value & ", "                                  'тип поля: String
strSQL = strSQL & Srok_Month.Value & ", "                                 'тип поля: String
strSQL = strSQL & Srok_Days.Value & ", "                                   'тип поля: String
strSQL = strSQL & "#" & Month(Start_Srok.Value) & "/" & Day(Start_Srok.Value) & _
"/" & Year(Start_Srok.Value) & "#, "                                          'тип поля: String
strSQL = strSQL & "#" & Month(End_Srok.Value) & "/" & Day(End_Srok.Value) & _
"/" & Year(End_Srok.Value) & "#" & ", "                                      'тип поля: String
strSQL = strSQL & Chr(34) & Rezgim.Value & Chr(34) & ", "           'тип поля: String
strSQL = strSQL & "[" & InClinic.Value & "]);"                             'тип поля: Boolean
myRecset.Open strSQL, myConn, adOpenKeyset, adLockOptimistic
И еще, никаких дополнительных кавычек или других символов в полях при вводе нет! Грешить не на что !

Последний раз редактировалось Serge_Bliznykov; 29.08.2011 в 09:41.
Vit2010 вне форума Ответить с цитированием
Старый 30.08.2011, 15:40   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

имхо, Вы не там ищете, где потеряли..

Попробуйте поискать ошибку в другом месте (не соответствие типов данных, например...)

по поводу длины кода:
Код:
Private Sub Кнопка3_Click()
 Dim strSQL As String, Sirname As String, First_Name As String, Second_Name As String
 Dim Initials As String, Birthday As Date, Nom_St As String, Srok_years As String
 Dim Srok_Month As String, Srok_Days As String, Start_Srok As Date
 Dim End_Srok As Date, Rezgim As String, InClinic As Boolean
  
 Sirname = "Testing-Olalo-Bolalo-olo"
 First_Name = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 Second_Name = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
 Initials = "wwwwwwwwwwwwwww"
 Birthday = DateSerial(1941, 6, 22)
 Nom_St = "dddddddddddddddddddddddd"
 Srok_years = "22"
 Srok_Month = "12"
 Srok_Days = "01"
 Start_Srok = DateSerial(2010, 1, 31)
 End_Srok = DateSerial(2011, 1, 31)
 Rezgim = "BBB"
 InClinic = True
  
strSQL = "INSERT INTO Patients ( Last_Name, First_Name, Second_Name, Initials, "
strSQL = strSQL & "Birthday, Nom_St, Srok_years, Srok_Month, Srok_Days, "
strSQL = strSQL & "Start_Srok, End_Srok, Rezgim, InClinic)"
strSQL = strSQL & " VALUES ("
strSQL = strSQL & Chr(34) & Sirname & Chr(34) & ", "          'тип поля: String
strSQL = strSQL & Chr(34) & First_Name & Chr(34) & ", "      'тип поля: String
strSQL = strSQL & Chr(34) & Second_Name & Chr(34) & ", "  'тип поля: String
strSQL = strSQL & Chr(34) & Initials & Chr(34) & ", "            'тип поля: String
strSQL = strSQL & "#" & Month(Birthday) & "/" & Day(Birthday) & _
"/" & Year(Birthday) & "#" & ", "
strSQL = strSQL & Chr(34) & Nom_St & Chr(34) & ", "           'тип поля: String
strSQL = strSQL & Srok_years & ", "                                  'тип поля: String
strSQL = strSQL & Srok_Month & ", "                                 'тип поля: String
strSQL = strSQL & Srok_Days & ", "                                   'тип поля: String
strSQL = strSQL & "#" & Month(Start_Srok) & "/" & Day(Start_Srok) & _
"/" & Year(Start_Srok) & "#, "                                          'тип поля: String
strSQL = strSQL & "#" & Month(End_Srok) & "/" & Day(End_Srok) & _
"/" & Year(End_Srok) & "#" & ", "                                      'тип поля: String
strSQL = strSQL & Chr(34) & Rezgim & Chr(34) & ", "           'тип поля: String
strSQL = strSQL & "[" & InClinic & "]);"                             'тип поля: Boolean


 MsgBox "код: Length = " & Str(Len(strSQL))
End Sub
в данном примере в строку легко записывается 400 символов.....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверить длину строки в js Даниил_глазко JavaScript, Ajax 5 26.12.2010 06:34
Задать длину строки bead HTML и CSS 1 08.12.2010 18:00
Какое ограничение на длину строки в php? Gtx541 PHP 2 21.07.2010 23:55
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Узнать длину строки Яр|/||< (^_^) Паскаль, Turbo Pascal, PascalABC.NET 2 22.09.2009 23:46