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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2011, 20:08   #11
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

На счет Variant, он работает намного медленнее, но для кодера delphicoding в самый раз, я думаю он по достойнству оценит тип COM-ориентированных техн. Microsoft-a.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 29.07.2011, 20:52   #12
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Не, ну вы оба красавцы! А разве можно вообще "в среде Delphi написать более быстрый тип", ежели компилятор Delphi априори не знает и не умеет работать с Date/Integer=null ?!

Последний тупой вопрос на сегодня - при передачи из Delphi через Dataset в БД значения Variant:=null передаются как "null" или не передаются вообще? БД воспринимает их как "нужно записать null" или как "ничего не передали, значит это поле перезаписывать не будем".

PS Если все эти действия приводят к записи в БД значения null, тогда вопрос - как при вызове процедуры указать один из атрибутов пустым, чтобы в БД данное поле НЕ было перезаписано?! Конструкция типа procedure Dannie(1,2,,,5) вызывает в Delphi ошибку... Delphi очень хочет, чтобы каждый параметр был указан и написан!

Последний раз редактировалось delphicoding; 29.07.2011 в 21:05.
delphicoding вне форума Ответить с цитированием
Старый 29.07.2011, 21:05   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
"нужно записать null"
сейчас проверить не могу. но, по всей логике - именно так и будет!


а по поводу использования типа variant
если открыть описание TField (как, впрочем, и любого типа данных, наследованного от TField),
то легко увидеть, что там присутствует и тип вариант
Цитата:
Код:
    property Value: Variant read GetAsVariant write SetAsVariant;
так что не надо его сильно бояться...

Последний раз редактировалось Serge_Bliznykov; 29.07.2011 в 21:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.07.2011, 21:13   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, а вы работаете строго через компоненты(DataSet,Table или что там для БД?)
может стоило немного SQL подучить и работать нормальными запросами?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 22:21   #15
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
сейчас проверить не могу. но, по всей логике - именно так и будет!
значит это ещё одна НЕДОРАБОТКА Delphi - невозможность ничего не передавать. То есть отсутствие возможности НЕ передавать атрибуты и как следствие никак не менять данные в БД. Правильная реализация данной возможности возможна двумя способами:
а) разрешить в среде разработки пропускать значения, которые не нужно менять, а именно: Dannie(1,2,,,5)
б) ввести в SQL (и Delphi,C++,итд) параметр отличный от null например clear/empty, который при передачи в СУБД будет интерпретирован как "ничего не записывать", тогда null в свою очередь можно интерпретировать как "записать пустоту".

Всё было бы удобно и логично. Сейчас же из-за заморочек Delphi: I) нет возможности делать одно из двух действий; II) даже вы профи доконца не уверены, что же этот null в итоге делает...

PS На самом деле в SQL предусмотрена работа с пустым значением, то есть без значения. А вот Delphi выпендривается, ругается и вообще так не может... в плане работы с БД это серьёзный недостаток!

Цитата:
так что не надо его сильно бояться...
Спасибо, успокоили!
Цитата:
ТС, а вы работаете строго через компоненты(DataSet,Table или что там для БД?)
Я работаю очень строго. И предпочитаю когда видно что и где сделано ранее. Иными словами - я бы наверно предпочёл всё писать кодом. Но так в проекте делали до меня, сейчас всё переделывать нереально, поэтому сейчас работаю через: интерфейс => код => Datasource => FIBDataset => хранимые процедуры БД => СУБД FB.

Последний раз редактировалось delphicoding; 29.07.2011 в 22:23.
delphicoding вне форума Ответить с цитированием
Старый 29.07.2011, 22:29   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я имел в виду ваше взаимодействие с БД, запросы вы пишите?
Цитата:
б) ввести в SQL (и Delphi,C++,итд) параметр отличный от null например clear/empty, который при передачи в СУБД будет интерпретирован как "ничего не записывать", тогда null в свою очередь можно интерпретировать как "записать пустоту".
вы хоть представляете что за бред сказали?
null и есть пустота.
Цитата:
значит это ещё одна НЕДОРАБОТКА Delphi - невозможность ничего не передавать.
судя по количеству ваших недовольств, вам стоит или сменить инструмент, или сделать свой.
Цитата:
а) разрешить в среде разработки пропускать значения, которые не нужно менять, а именно: Dannie(1,2,,,5)
хм, это ваша процедура? или таблица такая? если процедура, то вы сами дали ей такие аргументы.
Цитата:
PS На самом деле в SQL предусмотрена работа с пустым значением, то есть без значения. А вот Delphi выпендривается, ругается и вообще так не может... в плане работы с БД это серьёзный недостаток!
и кто мешает использовать SQL запросы?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 22:37   #17
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
хм, это ваша процедура? или таблица такая? если процедура, то вы сами дали ей такие аргументы.
Процедура, как и любой объект обладающий несколькими параметрами, может быть определён в конкретном месте лишь частично по мере необходимости. Посмотрите на все компоненты в среде Delphi через ObjectInspector и затем dfm текстом - там же прописаны НЕ все параметры, а только те, которые используются в данный момент! Хоть это реализовали правильно. Точно также должно быть с атрибутами процедур - возможность пропускать неиспользуемые в данном месте атрибуты.
Цитата:
и кто мешает использовать SQL запросы?
Никто. Только в Delphi ДО SQL запроса нужно много чего ещё сделать с данными - вот это сделать можно только с использованием variant и только с использованием null, что в итоге лишает возможности: а) оптимизировать выполнением кода неиспользуя неактуальные в данном месте значения; б) нельзя передать в БД "ничего". Фигня'c в Delphi с этим...
Цитата:
вы хоть представляете что за бред сказали?
Мде. Профи... На это разговор можно закончить.
delphicoding вне форума Ответить с цитированием
Старый 29.07.2011, 22:43   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Пепел Феникса, согласен с каждым Вашим словом!



delphicoding, Вы себе что-то невообразимое вообразили, и теперь хаете Delphi за то, что оно не соответствует Вашим фантазиям!

Хотите странного - ну так либо допишите код в эти ваши процедуры, чтобы параметры, которые Вы присвоили NULL не писались, либо тоже самое сделайте на стороне сервера (к сожалению не силён в хранимых процедурах и триггерах FB, но я на 98% уверен, что это можно организовать силами сервера.

Только учтите, что в БД, если поле допускает запись NULL, но - Вы своей изогнутой логикой лишите программу возможности писать NULL в такие поля... Это может повлиять на запросы к данным (и на логику работы с данной БД)....
Впрочем, Вы разработчик, Вам виднее куда и что писать, а куда - не писать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.07.2011, 22:47   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Процедура, как и любой объект обладающий несколькими параметрами, может быть определён в конкретном месте лишь частично по мере необходимости.
процедура в отличие от свойств, должна получать все параметры.
вы не путайте мух и котлеты.
свойства имеют значения по умолчанию.
параметрам тоже можно их задать, но там определенные правила, а именно что параметры не указываются с конца.
Цитата:
Только в Delphi ДО SQL запроса нужно много чего ещё сделать с данными - вот это сделать можно только с использованием variant и только с использованием null, что в итоге лишает возможности
хм, и давно? вам по сути надо составить строку запроса, вариант там не нужен.
Код:
'SELECT MEDALLINE,LEVEL FROM GRANTEDMEDALS WHERE CHAR='+IntToStr(CharId)
вот пример формирования простого запроса к БД(из рабочего кода, правда переведено с PHP на Делфи)
может запрос с ошибкой, но я сейчас далеко от дома, мне не посмотреть его.
Цитата:
Мде. Профи... На это разговор можно закончить.
сожалею, вам видимо никогда им не стать.
ибо на любой свой косяк/лень вы обсираете Делфи.
синтаксис языка и его правила известны еще очень давно, вы хотите их нарушить, и недовольны что вас посылает компиль.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 29.07.2011 в 22:50.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.07.2011, 22:48   #20
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

delphicoding, я работаю с БД, а именно разрабатываю свою небольшую СУБД. И прекрасно понимаю значение Null в БД. В наборе данных работа с Null полностью реализована. На ваши вопросы я не могу ответить, потому что они у меня в голове не "компилируются".
На счет невозможности в непередачи параметров, то в Delphi есть такая возможность, для этого мы присваиваем значение по умолчанию, например:
Код:
procedure X(a: Byte; s: string = 'строка');
Но этот вариант нужет, если вы используете эту подпрограмму для определенного случая, а не для всех случаев. Я уже вам предложил не иметь мозг людям, а использовать этот набор данных, содержащийся на первой форме. Набор данных он специально реализован для работы с БД, а вы хотите просто так стандартными средствами получить специализированное средство организации работы с БД, спуститесь с небес.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести integer в Date demiancz Общие вопросы Delphi 11 17.02.2011 23:08
КАк сделать JOIN в Access с объединением по NULL Izhic Помощь студентам 1 09.02.2011 11:18
FireBird. Как конвертировать Integer в Date и обратно? BeJIuKuu_Hexo4yxa SQL, базы данных 5 25.10.2010 10:10
как сравнить c null? MigelCNB Общие вопросы Delphi 4 22.09.2010 15:06
Как сделать подобие NOT NULL в DataGridView? C# Sparkman Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 18.08.2010 11:07