Публикации
Последние новости:
 
Высокие технологии
Technology
Компьютерное железо
Программное обеспечение
Компьютерная безопасность
Операционные системы
Компьютерный справочник
БД
Интернет сегодня
AudioТехника
Средства связи
Весь спектр цифровой техники
Мир авто
Бизнес-финансы
Всё о культуре
ПроСпорт
Всё о компьютерах
Детское чтение
Мировые телекоммуникации
Пресс-релизы
 
Статьи
Мир культуры
Интересно о спорте
Покупаем:
ТурТранс
Для прекрасных дам
Усадьба, дом
 

Платный хостинг от провайдера HostSpace.com.ua - хостинг, регистрация доменов. Поддержка PHP, MySQL, почта - в каждом тарифном плане.





Тайна вопросительного знака


Владимир Журавлев, Visual FoxPro CLUB









Заранее прошу прощения у ассов клиент-сервер. Им совсем незачем читать эти заметки и ругать меня за изложение тривиальных вещей.
Безусловно этот материал для начинающих делать клиент-сервер. Ну не сразу же в конце концов человек становиться ассом. Когда то нужно с чего то начинать.
Возможно я не совсем знаком с нашим уровнем знаний, но лично для меня тайна вопросительного знака стала своего рода откровением около двух с половиной лет назад. А когда я ее осознал, то стал ее применять и налево и направо и сэкономил кучу времени и кода.
Написание клиент -сервер из Фокса требует двух вещей - знание Фокса и знание сервера. Но наш Российский заказчик , впрочем как и зарубежный, бывает очень не стабилен. Вот говорит он тебе- я твердо решил взять сервером Интербейс. И если что имеешь против - гуляй дальше-программистов навалом.
Вот сидишь ты , сидишь, мучаешься с кодом, и наконец, некоторый успех. Вроде научился плавать и ждешь от босса или клиента хоть маленькой похвалы. ( на материальные вознаграждения только слабая надежда.) И тут это гражданин(ка) или контора вдруг и говорит , мы решили -Оракл. ( а ты их сам умолял и просил до этого про это) И все -код-коту под хвост. Только ты освоился с Оракл, а они как капризная девица говорят- мы твердо решили -MS SQL.
Ну вот, посколько у нас в стране любой даже самый захудалый заказчик или клиент очень редок, ты на все соглашаешья и молча учишь все это подряд. В такой ситуевине нужно все, что только можно сделать менее зависимым от сервера ( хотя реальной инвариатности кода все равно нет) и все , что только можно засунуть в классы библиотек, работающих с серверами. Тогда любой выворот уже и не страшен.
Так вот огромную роль в этой самой инвариантности кода играет вопросительный знак. Кое что про него найдете в ссылках :
http://support.microsoft.com/subbort/kb/articles/q156/6/31.asp?LNG=ENG&AS=PER
http://support.microsoft.com/support/kb/articles/q157/5/25.asp?LNG=ENG&AS=PER

К большому сожалению во всех этих ссылках есть примеры с вопросительным знаком для команд сервера типа SELECT * from mytable where mytable.pid=?m.pid. Однако простая проверка показывает, что вопросительный знак работает и в других командах. Будь моя воля, я как всякий ленивый программист поставил бы памятник тому разработчику, кто придумал и реализовал этот самый вопросительный знак.
Ну а теперь поближе к нашим баранам. Что это нам дает .
Как скажем послать на Оракл ( другие сервера или куда подальше ) обычную переменную с полем типа дата , на MS SQL переменную с парой двойных одинарных или обратных апострофов, вообще целый файл с текстом, в котором вообще не известно какие спец символы и кавычки есть в бинарное поле Оракл. Техника , которую обычно советуют-замена одних кавычек на другие , что ломает текст. Ну всем известно, что есть функция SQLEXEC с командой сервера, а команда -это текстовая строка. Ну думаем мы-сделаем эту строку на Фоксе и все дела .
Пусть мы имеем фоксовскую переменную vfpdateofbirth типа дата и хотим ее присвоить дню рождения работника на сервере Оракл . Напишем следующую переменную типа текст и пошлем ее на Оракл

m.sql=insert into demo.employee (dateofbirth) values(+dtoc(vfpdateofbirth)+)
- Переменная хоть куда - весь текст с чем надо. Посылаем на сервер
=sqlexec(con,m.sql)
И:.
Оракл посылает нас к чертовой бабушке. Открываем справочник по Оракл и обнаруживаем, что данный сервер жутко чувствителен к формату Нужно еще знать Оракловскую функцию to_date и кучу ее правильных форматов,не всякий из которых годиться для Фокс переменной. То есть нужно написать что то вроде
Cdt=dtoc(vfpdateofbirth)
(to_date("+cdt+",DD.MM.YYYY))". А то может быть и to_date("+cdt+","DD.MM.YYYY HH24.MM.SS).

если фоксовская переменная типа дэйттайм.
Дальше-больше , для Интербейс нужно знать функцию преобразования типов cast , для MS SQL функцию convert. Так или иначе, все это все равно узнаешь, но ей богу это мнговато для такого старого маразматика , как я. Но вопросительный знак сам делает всю работу дез всяких таких функций. Перепишем нашу первую команду так

m.sql=insert into demo.employee (dateofbirth) values (?dtoc(vfpdateofbirth)
=sqlexec(con,m.sql)


Посылаем на любой сервер- и все хорошо.
Есть правда несколько несколько небольших тонкостей на разных серверах. Скажем если послать пустую дату на MS SQL SERVER , он вместо нее запишет дату начала века ( зависит от текущих серверных установок). Следует заменить ее на NULL
Проблема с апострофами для вопросительного знака не существует

m.sql0=insert into table (fieldname) values (m.sql2=")"
m.sql= "" +" "+ . . . .! Сколько хочешь любых одиночных и парных апострофов
m.sqlr=m.sql0+?m.sql+msql2
sqlexec(con,.mqlr)

Переменная m.sqlr может быть даже содержанием файла, в котором бох знает что лежит . Вот фрагмент одной моей программы , где Фоксовые переменные разного типа посылаются на разные типы полей в MS SQL server

aa=insert into thisform.port(Karti)
SELECT karti
rc=recc()
j=0
GO top
bb+aa+documents(documentcodeid,controltime,dateofcreation,outgono,incomno,corrdate,soprovno,contents, execdate,documenttypeid,soprovnodate,folder,correspondent) values(DO while not eof(karti)
j=j+1
select karti
kd=0
IF seek(int(val(kodd)),docc,numcode)
kd=docc.documentcodeid
ELSE
kd=0
ENDIF
sod=sodd++sodd1++sodd2++sodd3
dl+iif(isdigit(delo),delo,00)
*** Решение проблемы пустой даты, чтобы не было 01.01.1900 01.01.2000
srokt=iif(empty(sroki),null,sroki)
datpt+iif(empty(datp),null,datp)
soprdatt+iif(empty(soprdat),null,soprdat)
datot=iif(empty(dato),null,dato)
dap1t=iif(empty(dap1),null,dap1)
select karti
cc=bb+"?kd,?srokt,?datpt,?isn,?vxn,?datot,?soprnom,?sod,?dap1t,1,?sorpdatt,?dl,?korr1)"
IF sqlexec(con,cc)>0
ELSE
thisform.write_error("karti",line())
*messagebox(str(recno(karti)))
ENDIF


Все переменные с вопросительным знаком -это переменные Фокса.



www.sdteam.com

БД 28-01-2007

SAP покупает компанию Visiprise 07-07-2008 БД
Европейский производитель корпоративного программного обеспечения SAP планирует купить компанию Visiprise, занимающуюся созданием софта для корпоративного и производственного планирования. Сделка, финансовые условия которой не разглашаются, будет закрыта в июле этого года.После завершения покупки, все разработки Visiprise будут интегрированы в программное обеспечение SAP для автоматизации бизнес-процессов и комплексной интеграции производственных...


SAP занялась продажей индивидуальных лицензий 08-10-2007 БД
SAP представила новый тип лицензии на программное обеспечение NetWeaver, используемое для автоматизации деятельности компаний. Новая лицензия представляет собой годовую подписку и ориентирована она на индивидуальных разработчиков.В компании говорят, что ранее SAP занималась лишь продажей лицензий компаниям, теперь индивидуальные пользователи смогут купить годовую лицензию. Для этого им необходимо будет присоединиться к сети SAP developer network ...


Oracle купила компанию Netsure Telecom 05-09-2007 БД
Oracle сегодня сообщила о покупке компании Netsure Telecom Limited, производителя средств для обеспечения безопасности сетей, исследования данных в сетях и общего анализа корпоративных сетей.Основная задача программного обеспечения Netsure Teleocm - это комплексная диагностика критически важных крупных сетей. Среди клиентов купленной компании есть и крупнейшие операторы связи - Vodafone, Cable&Wireless, Eircom и ряд других.Компания Netsure являет...


Москву посетил Президент Oracle Чарльз Филлипс 19-08-2007 БД
Сегодня в рамках московской пресс-конференции Президента Oracle Чарльза Филлипса было объявлено об итогах 30-летнего развития корпорации и ее продуктов, а также представлена глобальная стратегия Oracle.В программе четырехдневного визита руководителя Oracle в Москву и Санкт-Петербург - встречи с ключевыми клиентами и партнерами, эффективно использующими технологии и бизнес-приложения Oracle в России.По итогам 2007 финансового года, годовой доход O...

Вооруженные силы Грузии внедрили систему управления ресурсами SAP 13-07-2007 БД
Специалисты украинского НИИ автоматизированных компьютерных систем «Экотех» (НИИ АКС «Экотех») совместно со специалистами главного исполнителя проекта – грузинской компании «UGT», при участии «SAP Украина», завершили этап создания Концептуального проекта по внедрению интегрированной системы управления ресурсами предприятия SAP ERP в Вооруженных Силах (ВС) Грузии.По словам министра обороны  Грузии Давида Кезерашвили, прое...

Oracle представляет СУБД Oracle Database 11g 10-07-2007 БД
Корпорация Oracle завтра представит новую версию своего основного и самого популярного продукта - СУБД Oracle Database 11g. Новая версия станет самым значимым обновлением системы управления базами данных за последние 4 года.Однако бума скачиваний и покупок новой версии вряд ли стоит ожидать. Дело в том, что СУБД, равно как и другие продукты Oracle, рассчитаны на корпоративный сектор, причем сектор довольно крупных компаний. Данный сегмент являетс...
 
При любом использовании материалов сайта ссылка на сайт www.archive.com.ua обязательна.
Rambler's Top100 Рейтинг@Mail.ru