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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2013, 07:02   #1
NuraPROG
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 20
По умолчанию Mid и trim

Здравствуйте. с структурой select я разобралась, но в данной строке скинутой как пример не могу разобраться с вот этим выражением Mid(Trim(Str([kodzprn]))

Код:
INSERT INTO шаг1 ( munr, tippos, oktmo, god, period, nomsob, zn" + Trim(Str([knp])) + ", zn )" _
        SELECT " + Mid(Trim(Str([kodzprn])), 1, 5) + Trim(Str(0)) + Trim(Str(0)) + Trim(Str(0)) + " AS Выражение1" _
        " + IIf(Mid(Trim(Str([kodzprn])), 6, 1) = Trim(Str(4)), 4, 1) + " AS Выражение2, tab.kodzprn" _
         " + Forms!dbo_p_munr.pGod.Value + " AS Выражение3, 0 AS Выражение5, 0 AS Выражение6, Val(0) AS Выражение4" _
        FROM tab;
NuraPROG вне форума Ответить с цитированием
Старый 16.10.2013, 08:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Mid(Trim(Str([kodzprn])), 1, 5) + Trim(Str(0)) + Trim(Str(0)) + Trim(Str(0))
Ой ой... А можно узнать, что именно это выражение делает и для чего?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2013, 08:54   #3
NuraPROG
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 20
По умолчанию

Да вот руководитель скинул программку как пример в access а нужно разобраться и на delphi сделать а вот с mid так запутанно, кажется все это бессмыслица какая то,решила спросить помощи вдруг я что то не понимаю...
NuraPROG вне форума Ответить с цитированием
Старый 16.10.2013, 09:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чего я не пониаю, так это зачем использовать функции Делфи в запросе, если можно (скорее всего) использовать функции самой СУБД. Задание какое? Что делается этим запросом? Что нужно получить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2013, 09:48   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там с кавычками беда, да и Trim(Str(0)) + Trim(Str(0)) + Trim(Str(0)) можно заменить на '000'

Код:
SELECT Mid(Trim(Str([kodzprn])), 1, 5) + '000' AS Выражение1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.10.2013, 11:01   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

mid - фукция в MS Access получения ПОДСТРОКИ из строки

Цитата:
Код:
Mid(Trim(Str([kodzprn])), 1, 5)
банально получить первые пять символов значения поля kodzprn
Цитата:
Код:
Mid(Trim(Str([kodzprn])), 6, 1)
получить один 6-й символ из поля kodzprn
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2013, 19:33   #7
NuraPROG
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 20
По умолчанию

Извините,а как в Delphi это получить? как здесь правильнее будет оформить mid?
Код:
   sql.add('LEFT JOIN shag1 ON p_oktmo_v.kodzprn=shag1.oktmo');
   sql.add('WHERE shag1.oktmo Is Null');
   sql.add('and p_oktmo_v.kodzprn<>  Mid(str(Edit1.Text))), 1, 5)+str(100)');
   sql.add('and p_oktmo_v.kodzprn<>  Mid(str(Edit1.Text))), 1, 5)+str(400)');

Последний раз редактировалось NuraPROG; 16.10.2013 в 19:48.
NuraPROG вне форума Ответить с цитированием
Старый 16.10.2013, 22:54   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, для начала, если стоит задача выполнить код из сообщения #1, то просто вставляйте его в Delphi и выполняйте, вообще ничего менять не надо.

во-вторых, если вам нужно выделить часть из Edit1.Text, то для получения подстроки из строки есть функция Copy:
Код:
sql.add('and p_oktmo_v.kodzprn<>  '+Copy(Edit1.Text, 1, 5)+'000');
sql.add('and p_oktmo_v.kodzprn<>  '+Copy(Edit1.Text, 1, 5)+'400');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2013, 10:32   #9
NuraPROG
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 20
По умолчанию

iif возвращает один из двух объектов в зависимости от условия. а тут условие если IIf(Mid(Trim(Str([kodzprn])), 6, 1) = Trim(Str(4)), 4, 1) + " AS Выражение2, tab.kodzprn" ? как то все запутано здесь с этим IIF.

Trim(Str(4)), 4, 1) и здесь какой смысл, берет один 4ый символ из '4'.
Что то я напутала все...
NuraPROG вне форума Ответить с цитированием
Старый 17.10.2013, 10:46   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ваш запрос из VBA можно примерно так перевести
Код:
SELECT Mid(Trim(Str([kodzprn])),1,5)+'000' AS Выражение1,
       IIF(Mid(Trim(Str([kodzprn])),6,1)='4',4,1) AS Выражение2, tab.kodzprn,
       'здесь некая константа' AS Выражение3, 0 AS Выражение5, 0 AS Выражение6, Val(0) AS Выражение4
  FROM tab
Что там Val(0) делает не понимаю. Возможно тоже константа какая-то
Цитата:
iif возвращает один из двух объектов
возвращает 1 или 4
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 17.10.2013 в 10:52.
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ORACLE Delphi отпбрасивать все пробел TRIM xxbesoxx БД в Delphi 8 14.08.2013 19:21
Warning: trim() expects Dante5 PHP 10 16.03.2013 02:21
Запрос на удаление пробелов - Функция Trim cherepushka Microsoft Office Access 5 18.10.2012 14:19
Trim 0creator0 Microsoft Office Word 5 03.10.2011 17:43
Вопрос по функциям trim и empty Svetix PHP 4 01.06.2009 23:48