Основы работы с БД
Модератор: Модераторы
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Troublemaker писал(а):И честно пытаюсь разобраться с новой для меня идеологией разработки.
Несочтите за спам и флуд
мой опыт: как shade постигает очередные премудрости IT
И как вы понимаете, в таком случае не столь важно в каком формате книжка, и есть ли в ней полнотекстовый поиск
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
alexs писал(а):полнотекстовый поиск в SQL БД обычно реализуется простешим sql оператором like
Э-э, а каким боком sql БД соотносится с форматом djvu?
shade писал(а):И как вы понимаете, в таком случае не столь важно в каком формате книжка, и есть ли в ней полнотекстовый поиск
Спорный вопрос. Лично мне трудновато запрефетчить полторы тыщи страниц мануала по тому же дельфи
Troublemaker писал(а):Я оговорился: навигатору нужен dataSOURCE
Это ничего страшного. Главное не вставлять данные через DataSource.
Troublemaker писал(а):Спорный вопрос. Лично мне трудновато запрефетчить полторы тыщи страниц мануала по тому же дельфи
Ещё более спорный вопрос - найти такую книгу, чтобы в ней глава о базах данных занимала полторы тыщи страниц. А TMemDataset явно относится к главе о базах данных.
Как хочешь, но читать всё равно надо всё подряд. От того что ты выудишь в книге то место, где написано слово TMemDataset голова лучше варить не станет, т.к. работа с рекомым TMemDataset'ом строится на основе работы с обычным DataSet'ом, а ты это место в книге благополучно прошляпил с помощью Ctrl+F...
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Спорный вопрос. Лично мне трудновато запрефетчить полторы тыщи страниц мануала по тому же дельфиИ искать по тексту "tmemdataset" несколько проще, чем мотать отсканированные страницы в djvu, рискуя просто проглядеть нужное "замыленным" глазом.
Лучше один раз запрефетчить, чем всю жизнь мучаться самому и мучать народ теми вопросами, которые можно легко узнать из книги.
Ещё более спорный вопрос - найти такую книгу, чтобы в ней глава о базах данных занимала полторы тыщи страниц.
+1
Даже сама книга по Delphi обычно не более 500 страниц, из которых наболее существенная часть умещается на 100-200 страниц, которые можно осилить за пару вечеров. Остальное COM, DCOM и тому прочая лабуда, которая нужна далеко не всем.
Знание должно быть комплексным, а не обывочным
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
Роюсь в учебниках и т.п., но никак не могу понять простую, вроде бы, вещь: что, собственно, есть dataset? Это - одна таблица данных или набор из нескольких таблиц? Если из нескольких, то почему createtable не имеет параметров?
Второй момент касается dbgrid-a. Как Vadim писал здесь, я создаю memds.
Всё неплохо - строковые и числовые поля показываются и редактируются "На ура", но почему же все чекбоксы в гриде выглядят unchecked, хотя содержимое булевого поля точно меняется, что показывает DBCheckBox1?
Есть идеи?
Второй момент касается dbgrid-a. Как Vadim писал здесь, я создаю memds.
Код: Выделить всё
DS1.DataSet:=nil; //ибо не фиг прямо сейчас!
MDS:=TMemDataset.Create(MDSForm);
mds.FieldDefs.Add('Bool',ftBoolean);
mds.FieldDefs.Add('Stri',ftString,20);
mds.FieldDefs.Add('Inte',ftInteger);
mds.CreateTable; //вот сколько может быть таких createtable?
mds.Open;
b:=mds.FieldCount;
//Заголовки полей
for a:=0 to b-1 do begin //бегин остался, т.к. выполняются еще несколько несущественных действий
mds.Fields[a].DisplayLabel:=concat('Поле №',IntToStr(a));
end;
//Заливаем 20 записей
for a:=1 to 20 do begin
mds.Append;
if random()>0.45 then bol:=true else bol:=false;
mds.SetFields([bol,BoolToStr(bol),mds.DataSize]);
mds.Post;
end;
//Всем data-aware контролам назначаем соответствующий датасорс
DS1.DataSet:=MDS;
DBCheckBox1.DataSource:=DS1;
DBGrid1.DataSource:=DS1;
NAV1.DataSource:=DS1; //навигатор
tfield(DBCheckBox1.Field):=mds.Fields.Fields[0];
// DataField:=mds.Fields[0].FieldName;
DBCheckBox1.ReadOnly:=true;
//для логических полей значения Value(Un)Checked игнорируются
TColumn(DBGrid1.Columns[0]).ValueChecked:='true,-1';
TColumn(DBGrid1.Columns[0]).ValueUnchecked:='false,0';
DBGrid1.Refresh;
Всё неплохо - строковые и числовые поля показываются и редактируются "На ура", но почему же все чекбоксы в гриде выглядят unchecked, хотя содержимое булевого поля точно меняется, что показывает DBCheckBox1?
Есть идеи?
Свойства ValueChecked/ValueUnchecked грида устанавливали?
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
m_guest писал(а):ValueChecked/ValueUnchecked грида устанавливали?
см. выше в коде:
До этого было:Troublemaker писал(а):TColumn(DBGrid1.Columns[0]).ValueChecked:='true,-1';
TColumn(DBGrid1.Columns[0]).ValueUnchecked:='false,0';
Troublemaker писал(а):TColumn(DBGrid1.Columns[0]).ValueChecked:='-1';
TColumn(DBGrid1.Columns[0]).ValueUnchecked:='0';
Меня здорово смущает, что это свойство типа string...
Почему смущает?..
Попробуйте оставить true/false
(Какие значения принимает у Вас логическое поле?)
Попробуйте оставить true/false
(Какие значения принимает у Вас логическое поле?)
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
Потому что string и boolean - несколько разные типы данных.m_guest писал(а):Почему смущает?
m_guest писал(а):Какие значения принимает у Вас логическое поле?
Troublemaker писал(а): if random()>0.45 then bol:=true else bol:=false;
mds.SetFields([bol,BoolToStr(bol),mds.DataSize]);
И если верить Лазарю, то:
bol:=true
bol.AsString='true'
bol.AsInteger=-1
Но я не знаю, с какой "версией" значения сравниваются свойства Value(Un)Checked. Вроде бы со строковой, если верить тому, что свойство задается как строка возможных вариантов, но в каком виде передается эта строка? То есть, идет сравнение grid.ValueUnChecked с boolean.AsString или с boolean.AsInteger или с чем-то еще?
Еще смутил неожиданно выяснившийся момент: (хелп по D7)
TField does not support integer values, and raises an exception when an attempt is made to get or set the AsInteger property - TField не поддерживает целочисленные значения и приводит к возникновению исключительной ситуации (эксепшна) при попытке ЧТЕНИЯ или ЗАПИСИ свойства AsInteger.
Выяснилось это, когда я попробовал прочесть значение булева поля AsInteger. Для true получил -1. Нормально. А когда попробовал записать исправленное значение обратно, то получил тот самый эксепшн.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Зачем к логическому полю обращаешся как к целому?
bool.AsBoolean:=true;
bool.AsBoolean:=false;
А в гриде пустые - потому что все поля могу принимать значение "пусто"
т.е. bool.Clear;
это и не истина и не ложь.
bool.AsBoolean:=true;
bool.AsBoolean:=false;
А в гриде пустые - потому что все поля могу принимать значение "пусто"
т.е. bool.Clear;
это и не истина и не ложь.
Troublemaker писал(а):Потому что string и boolean - несколько разные типы данных.
К примеру, я в Firebird могу представить значение логического поля как 'T' и 'F', и соответственно, "логическое" поле у меня будет типа Char(1)..
И соответственно, выставлю Value/Un/Checked в гриде
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Troublemaker писал(а):Меня здорово смущает, что это свойство типа string...
Это нормально. Просто не во всех БД есть настоящие логические типы. Например в FireBird пока нет
