Модераторы: Akina

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Кавычки в строке 
:(
    Опции темы
Zahny
Дата 18.4.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Каким символом показать, что " или ' - это не конец (начало) строки, а просто текст. Например при формировании SQL-запросов
Код

 sql = sql & " AND M.Purpose LIKE '*" & Form_Meetings.Purpose & "*'"

или
Код

Form_SiemensCWs.lblDescr.Caption = "Please, fill the information about Siemens co-worker. Filling of the field "Co-worker's name" is mandatory."

?
И если при поиске в строке поиска (в Form_Meetings.Purpose) тоже будут использованы кавычки, они ведь тоже будут истолкованы, как конец(начало) строки. Как с этим борться?
Спасибо
PM MAIL ICQ   Вверх
Akina
Дата 18.4.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Вопрос неясен. Если задача - в литерале вставить кавычку, то просто удвой ее

Код

Form_SiemensCWs.lblDescr.Caption = "Please, fill the information about Siemens co-worker. Filling of the field ""Co-worker's name"" is mandatory"

потому как стринговой переменной до звезды, кавычка там или нет - это для компилера кавычка не простой символ, а управляющий.

Что же до
Цитата(Zahny @ 18.4.2005, 11:35)
если при поиске в строке поиска (в Form_Meetings.Purpose) тоже будут использованы кавычки, они ведь тоже будут истолкованы, как конец(начало) строки

то, пардон, КЕМ они будут так истолкованы??? уж никак не оператором присвоения. соответственно вопросы движку поиска - а уж у него есть какие-нить правила квотирования служебных символов...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 18.4.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



С двойными кавычками поняла. Спасибо. Просто ведь в разных языках - разные способы. А Basicу меня никто не учил, вот и не знаю таких мелочей.
С поиском, следовательно, тоже понятно.Теперь, правда, проблема с длиной строки. Ну ладно, сама разберусь.
Спасибо за помощь
PM MAIL ICQ   Вверх
Akina
Дата 18.4.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Zahny @ 18.4.2005, 13:24)
Теперь, правда, проблема с длиной строки

Это ты к чему? какая может быть проблема с длиной строки - в оперативку не лезет, что ли?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 18.4.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Цитата(Akina @ 18.4.2005, 12:44)
Это ты к чему?

Это я к тому, что в переменную типа String влезает не бесконечное количество символов

PM MAIL ICQ   Вверх
Akina
Дата 18.4.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(MS)
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.


2 Гб на строку - и тебе ЭТОГО мало???


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 19.4.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Мне-то достаточно. Только почему он в таком случае мне строку обрезает?!
Строка объявлена, как
Код

Dim sql as String

Насколько я поняла после прочтения хелпа - это строка неограниченной длины. Так в чем проблема?!
PM MAIL ICQ   Вверх
Akina
Дата 19.4.2005, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Zahny @ 19.4.2005, 10:36)
почему он в таком случае мне строку обрезает?!

Не верю! © Станиславский

Сюда - содержимое строки ДО обрезки, оператор, на котором происходит обрезка (со значениями переменных), строка ПОСЛЕ обрезки.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 19.4.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



У!
Ну ладно, напишу, как могу...
Код


sql = "SELECT M.ID as MeetId, T.CNames as [Names of clients], M.Date, M.Purpose, T.SNames AS [Names of Siemens co-workers] FROM Meetings as M, tblTmp as T WHERE T.MID=M.ID"
       
    Form_Meetings.Date.SetFocus
    If (Form_Meetings.Date.Text <> "") Then
        sql = sql & " AND M.Date Like ""*" & Form_Meetings.Date & "*"""
    End If

    Form_Meetings.Purpose.SetFocus
    If (Form_Meetings.Purpose.Text <> "") Then
        sql = sql & " AND M.Purpose LIKE ""*" & Form_Meetings.Purpose & "*"""  'Строка1
    End If

    If (numb > 0) Then
        sql = sql & " AND ("
    
        For i = 1 To numb
           If (i > 1) Then sql = sql & " OR "
           sql = sql & "M.ID = " & Arr(i - 1)
        Next i

        sql = sql & ")"
        
    End If
    
    sql = sql & " ORDER BY M.Date Asc"



Это в кратце, как он формирует строку. Если в Строка1 в поле очень много написано, то он обрезает, во-первых, то, что в поле, во-вторых, не дописывает всё, что должен дописывать потом. Например, ORDER BY M.Date Asc

Пример строки из дебаггера после выполнения кода:
sql="SELECT M.ID as MeetId, T.CNames as [Names of clients], M.Date, M.Purpose, T.SNames AS [Names of Siemens co-workers] FROM Meetings as M, tblTmp as T WHERE T.MID=M.ID AND M.Date Like "*12.12.2004*" AND M.Purpose LIKE "*s1s2s3s4s5s6s7s8s9s10s11s12s13s141"

Куда делось продолжение?
PM MAIL ICQ   Вверх
Akina
Дата 19.4.2005, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Zahny @ 19.4.2005, 11:06)
Пример строки из дебаггера после выполнения кода:

А если на строке 11 поставить брейкпойнт и посмотреть как изменяется строка при пошаговом выполнении?

Цитата(Zahny @ 19.4.2005, 11:06)
Если в Строка1 в поле очень много написано, то он обрезает, во-первых, то, что в поле, во-вторых, не дописывает всё, что должен дописывать потом.

Попробуй сперва собрать все параметры в отдельные переменные и потом уже слепить строку запроса - типа (draft code!!!)

Код

Temp1 = "SELECT M.ID as MeetId, T.CNames as [Names of clients], M.Date, M.Purpose, T.SNames AS [Names of Siemens co-workers] FROM Meetings as M, tblTmp as T WHERE T.MID=M.ID"
       
    Form_Meetings.Date.SetFocus
    If (Form_Meetings.Date.Text <> "") Then
        Temp2 = " AND M.Date Like ""*" & Form_Meetings.Date & "*"""
    End If

    Form_Meetings.Purpose.SetFocus
    If (Form_Meetings.Purpose.Text <> "") Then
        Temp3 = " AND M.Purpose LIKE ""*" & Form_Meetings.Purpose & "*"""  'Строка1
    End If

    If (numb > 0) Then
        Temp4 = Temp4 " AND ("
    
        For i = 1 To numb
           If (i > 1) Then sql = sql & " OR "
           Temp4 = Temp4 & "M.ID = " & Arr(i - 1)
        Next i

        Temp4 = Temp4 & ")"
        
    End If
    
    sql = Temp1 & Temp2 & Temp3 & Temp4 & " ORDER BY M.Date Asc"



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 19.4.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Цитата(Akina @ 19.4.2005, 10:24)
А если на строке 11 поставить брейкпойнт и посмотреть как изменяется строка при пошаговом выполнении?

При пошаговом выполнении: просто добавляет, сколько может, а потом строка больше не меняется.
Что за draft code? В Хелпе не нашла smile
PM MAIL ICQ   Вверх
Akina
Дата 19.4.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Zahny @ 19.4.2005, 11:46)
Что за draft code? В Хелпе не нашла

draft code = написан левой пяткой smile другими словами - требует проверки.

Цитата(Zahny @ 19.4.2005, 11:46)
просто добавляет, сколько может, а потом строка больше не меняется.

А сколько может? см. как меняется len(sql)...

Как вариант

Код
Dim strSQL as String * 50000
Dim sql as String
...
' Собираем строку запроса в переменной strSQL 
...
sql = Trim(strSQL)

Добавлено @ 10:55
но вообще чудеса...
Добавлено @ 10:59
Впрочем еще предположение из разряда безумных... попробуй не

Код

sql = sql & " AND M.Purpose LIKE ""*" & Form_Meetings.Purpose & "*"""  'Строка1


а

Код

Temp = Form_Meetings.Purpose 
sql = sql & " AND M.Purpose LIKE ""*" & Temp & "*"""  'Строка1

и посмотри что в Temp останется... нет ли там служебных символов...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 19.4.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Сейчас с ума сойду...
Результаты испытаний:

1.
Цитата(Akina @ 19.4.2005, 10:53)
как меняется len(sql)

Меняется, как и положено: растет... постоянно, хотя содержимое строки не меняется

2.
Цитата(Akina @ 19.4.2005, 10:53)
Как вариант
с собиранием строки запроса в строке конечной длины. Как складывать строки конечной длины?! & - не действует. После начального присвоения - см. строка 1 - ничего не добавляется. И еще там какая-то подозрительная цифра 5 в конце строки: sql="SELECT M.ID as MeetId, T.CNames as [Names of clients], M.Date, M.Purpose, T.SNames AS [Names of Siemens co-workers] FROM Meetings as M, tblTmp as T WHERE T.MID=M.ID 5"

3. c Temp'ом не проходит. Мне он никаких служебных символов не показал. И потом, если в поле написано 2-3 слова, ничего не обрезается.

Сейчас попробую с кучей переменных draft code. smile Хотя я вчера такое пробовала и вроде не спасло.
PM MAIL ICQ   Вверх
Akina
Дата 19.4.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Zahny @ 19.4.2005, 12:47)
Меняется, как и положено: растет... постоянно, хотя содержимое строки не меняется

Отлично!!! у тебя где-то в строку затесался служебный символ. Ищи его.

Цитата(Zahny @ 19.4.2005, 12:47)
Как складывать строки конечной длины?! & - не действует

LSET


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahny
Дата 19.4.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 7.4.2005
Где: В н.вр. Германия, Мюнхен

Репутация: нет
Всего: нет



Запихнула в отдельную строку

sql3 = " AND M.Purpose LIKE ""*" & Form_Meetings.Purpose & "*"""
и
sql3 = sql3 & " ORDER BY M.Date Asc"

Далее

Form_FoundCWs.CWsListe.RowSource = sql & sql3

Вроде работает. Но уж очень длинных строк я не задавала. А кавычки для поиска я просто запретила использовать: и так нейдут, что надо
PM MAIL ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.1598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.