Полная версия этой страницы:
Dbgrid и Table
RezchiK
22:01:2008, 14:54
Может кто знает как сделать вот такую хитрожёлтую вещь:
У меня в табилце первое поле, это "номер заказа"всё вводится вот таким макаром:
Цитата
procedure TFZakaz.Button2Click(Sender: TObject);
begin
// добавляем пустую запись в набор Glavn
DataModule1.TableGlavn1.Insert;
DBGrid1.Fields[0].AsInteger;
DataModule1.TableGlavn1.Fields[1].AsInteger:=StrToInt(Edit1.Text); // номер заказа
DataModule1.TableGlavn1.Fields[2].AsString:=Edit2.Text; // заказчик
DataModule1.TableGlavn1.Fields[3].AsString:=Edit3.Text; // Адрес
DataModule1.TableGlavn1.Fields[4].AsDateTime:=StrToDateTime(MaskEdit1.Text);// дата заказа
DataModule1.TableGlavn1.Fields[5].AsDateTime:=StrToDateTime(MaskEdit2.Text);// дата изготовления
DataModule1.TableGlavn1.Fields[6].AsInteger:=StrToInt(Edit4.Text); // стоимость
DataModule1.TableGlavn1.Fields[7].AsString:=Edit5.Text; // название изделия
DataModule1.TableGlavn1.Fields[8].AsString:=Edit6.Text;
DataModule1.TableGlavn1.Fields[9].AsString:=label11.Caption;
DataModule1.TableGlavn1.Fields[10].AsString:=label12.Caption;
edit1.Clear;
edit2.Clear;
edit3.Clear;
MaskEdit1.Clear;
MaskEdit2.Clear;
edit4.Clear;
edit5.Clear;
edit6.Clear;
label11.Caption:='';
label12.Caption:='';
end;
как мне сделать чтоб при последующем заполнении поля "номер заказа" он выдал масагу мол так и так, вообщем такой номер уже есть))), если запись с таким"номером заказа" уже имеется...
И вот такой ещё квейшенс...как это можно сделать: я задаю номер заказа и прога выдаёт мне всё по этому заказу(нужно для печати). Зарание благодарю
Barmutik
23:01:2008, 08:29
Немного смущает отсутствие Post после того как все данные в запись были включены...
Цитата(RezchiK @ 22:01:2008, 17:54 )
как мне сделать чтоб при последующем заполнении поля "номер заказа" он выдал масагу мол так и так, вообщем такой номер уже есть))), если запись с таким"номером заказа" уже имеется..
Так сделай поле номера заказа ключевым типа автоинкремента (или генератор и т.п., смотря что за база) чтоб само увеличивалось. Или отдельным запросом поищи - есть такой номер в базе или нет
Цитата(RezchiK @ 22:01:2008, 17:54 )
я задаю номер заказа и прога выдаёт мне всё по этому заказу(нужно для печати)
Тут тебе поможет связка Master - Detail. Или запрос с параметрами.
А еще советую отказаться от обращения к полю по его номеру (Fields[8], к примеру), а то если изменится порядок полей - то наступит день просветления

Лучше используй FieldByName.
RezchiK
23:01:2008, 08:59
База в чём у меня я не знаю(как-то не разабрался), но таблици я делал в Database Desktop и регистрировал её потом в Database Explorer...сейчас весь код переделал, так как связал dbedit с соответствующими полями таблицы и уже сними буду осуществлять поиск и печать...
Я сделал прощё, если в базе есть номер заказа, то он выдаст информацию по этому заказу, а если нет, то выдаст сответствующее сообщение...вот только ещё надо поставить там комбобокс в котором
можно было б выбрать картинку изделия, и она тоже пойдёт на печать...
Для:
RezchiKСовет в delphi есть демки посмотри их там все очень просто и наглядно показано, тем более что у тебя тоже база paradox
Если будут сложности тогад кидай на форум, но с начала попробуй сам разобраться
Цитата(RezchiK @ 23:01:2008, 11:59 )
База в чём у меня я не знаю
Нда... Без комментариев
RezchiK
23:01:2008, 09:28
Цитата
Нда... Без комментариев

Я просто не разбираюсь в них


Для:
RezchiKПрислушайся к совету
root, он правильные вещи говорит.
RezchiK
23:01:2008, 11:05
Для:
sax_ol>Прислушайся к совету root, он правильные вещи говорит.
Цитата
Для: root
Совет в delphi есть демки посмотри их там все очень просто и наглядно показано, тем более что у тебя тоже база paradox
Если будут сложности тогад кидай на форум, но с начала попробуй сам разобраться
Да я уже почти во всём разобрался, если в чём затуплю, то отпишусь



вот кстати непонятка:
procedure TFZakaz.FormCreate(Sender: TObject);begin
Edit7.Clear;
DBEdit1.Clear;
DBEdit2.Clear;
DBEdit3.Clear;
DBEdit4.Clear;
DBEdit5.Clear;
DBEdit6.Clear;
DBEdit7.Clear;
DBEdit8.Clear;
DBEdit9.Clear;
DBEdit10.Clear;
end;каждое поле привизал к полю таблицы, но при открытии формы, поля всё равно не очищаются(((
Для:
RezchiKу таблицы свойство активате отключи при включенном он позиционирует на первой записи таблицы
Цитата
Use TDBEdit to enable users to edit a database field. TDBEdit uses the Text property to represent the contents of the field.
=> что это только инструмент для отображения записи поля таблицы если ты хочешь при открытии удалить определенный записи то тебе необходимо прейти в режим редактирования "EDIT"
RezchiK
23:01:2008, 12:04
Для:
rootЦитата
у таблицы свойство активате отключи при включенном он позиционирует на первой записи таблицы
так если я отключу свойство active, то записи не будут записыватся в таблицу, а точнее даже данные нельзя будет внести)))
Цитата
=> что это только инструмент для отображения записи поля таблицы если ты хочешь при открытии удалить определенный записи то тебе необходимо прейти в режим редактирования "EDIT"
Это как если не секрет???)))
Для: RezchiK
table1.edit;
dbedit1.clear;
table1.post;
B вообще тогда зачем clear-ить? мож тогда другой подход нужен ?
RezchiK
23:01:2008, 14:37
Для:
rootВидишь у меня какая штука выходит: я открываю эту форму
Нажмите для просмотра прикрепленного файлаи там я заполняю данные, так сказать оформляю заказ и распечатываю его, также на ней я ищу по номеру заказа все данные, поэтому в событии OnCreate мне нужно написать очистку полей...
Я просто занимаюсь резьбой по дереву и курсач выбрал такой, чтоб для себя можно было бы использовать(потом хочу его прообгрейдить и на диплом...), так сказать свободная тема, вот теперь мучаюсь и задаю себе вопрос почему же я не как все: выбрал бы себе тему, скачал исходник, поправил интерфейс и был бы доволен, когда этот курсач допуск к сессии, которая уже почти закончилаь, ну нечего-прорвусь, где наша не пропадала
Проверка на уже существующий заказ:
Сначала запиши в переменные свои Edit-ы:
field1:=Edit2.Text; // заказчик
field2 :=Edit3.Text
Потом ищем их в базе
if DataModule1.TableGlavn1.Locate('имя_поля1;имя_поля2;...',VarArrayOf([field1,field2]),[])
then
ShowMessage('такой номер уже есть)))!')
else...
RezchiK
23:01:2008, 19:20
Для:
ZankaЦитата
Проверка на уже существующий заказ:
Сначала запиши в переменные свои Edit-ы:
field1:=Edit2.Text; // заказчик
field2 :=Edit3.Text
Потом ищем их в базе
if DataModule1.TableGlavn1.Locate('имя_поля1;имя_поля2;...',VarArrayOf([field1,field2]),[])
then
ShowMessage('такой номер уже есть)))!')
else...
Спасибо за совет, но я сделал прощё, так как всё таки тема свободная, я сделал заполнение таблиц на отдельной форме, где можно будет просматривать и редактировать все базы...а на той форме, что на рисунке я с помощью кнопки "введите номер заказа" я просто вывожу нужные записи...
RezchiK
24:01:2008, 19:11
У меня такая невезуха с фильтрацией БД-точнее она не выполняется((( создал вторичные ключи у полей 'FIOZakaz' и 'Material'...может что кто подскажет...он фильтрует, когда у вторичного ключа одно поле...
Цитата
procedure TFBase.Button3Click(Sender: TObject);
begin
if edit1.Text='' then ShowMessage('Введите параметр фильтра') else
begin
DataModule1.TableGlavn1.IndexName:='IND';
DataModule1.TableGlavn1.SetRangeStart;
DataModule1.TableGlavn1.FieldByName('FIOZakaz').AsString:=Edit1.Text;
DataModule1.TableGlavn1.SetRangeEnd;
DataModule1.TableGlavn1.FieldByName('FIOZakaz').AsString:=Edit1.Text;
DataModule1.TableGlavn1.ApplyRange;
end; end;
procedure TFBase.Button2Click(Sender: TObject);
begin
DataModule1.TableGlavn1.CancelRange; Edit1.Clear;
end;
procedure TFBase.Button4Click(Sender: TObject);
begin
if edit2.Text='' then ShowMessage('Введите параметр фильтра') else
begin
DataModule1.TableGlavn1.IndexName:='IND';
DataModule1.TableGlavn1.SetRangeStart;
DataModule1.TableGlavn1.FieldByName('Material').AsString:=Edit2.Text;
DataModule1.TableGlavn1.SetRangeEnd;
DataModule1.TableGlavn1.FieldByName('Material').AsString:=Edit2.Text;
DataModule1.TableGlavn1.ApplyRange;
end; end;
procedure TFBase.Button5Click(Sender: TObject);
begin
DataModule1.TableGlavn1.CancelRange; Edit2.Clear;
end;
RezchiK
25:01:2008, 05:43
Уже разобрался))) просто надо было в таблице у вторичных индексов галочку у свойства уникальный убрать и всё заработало)))
RezchiK
26:01:2008, 13:31
Вот ещё такой вопросец, никак нее могу догнать как делать связи с таблицами в Database Desktop. У меня две таблицы:
Glavn:
ID + *
Nom I
FIOZakaz A 30
Adress A 30
DataZakaz D
............
Image G
Adress:
ID + *
FIOZakaz A 30
Adress A 30
Как мне создать связи в десктопе, чтоб занесённые данные родительской таблицы Adress в поле с адресом, отображались в дочерней таблице Glavn??? И можно тоже самое сделать с изображением??? Потом как я понимаю надо будет прировнять эти поля в SQL в Query??? Есть мануал по БД в Delphi 3, но там к сожелению нет соответствующих картинок из раздела связей...может у кго они есть-поделитесь


RezchiK
29:01:2008, 09:49
Таблицы:
Glavn1:
ID + *; Nom I; IndNom I; FIOZakaz A 35; Adress A 30; DataZak D; DataIzg D; Price $; NameIzd A 60; RazmIzd A 20; Material A 30; Pokr A 30; Image G.
Adress:
IndNom + *; FIOZakaz A 35; Adress A 30.
Вторичный индекс в таблице Glavn1 IndNom(Maintained, Case sensitive)
Связь:
Child fields:IndNom[I] из таблицы Glavn1, Parent's key:IndNom[+] из таблицы Adress
Update rule-Cascade, Strict referentail integrity отмечена...
В таблице Adress
MasterSourse:SourseGlavn1
MasnerFields:IndNom->IndNom
В (Glavn1) заносятся данные, часть которых нужно сделать, чтоб бралась из вторй таблицы(Adress), но
при заполнении полей выдаёт ошибку:Project Rezba.exe raised exception class EDatabaseError whitn message 'Field 'IndNom' cannot be modified'.
Для: RezchiK
У вас странные связи.
Давайте по порядку.
Что в таблице Glavn1 и что в Adress, и как данные этих таблиц логически связаны между собой?
Не надо писать тут имена полей и все такое, просто своими словами.
RezchiK
29:01:2008, 15:57
Ну вообщем дело было так: В одной таблице(Заказы) записывается номер заказа, ФИО заказчика, дата изготовления и так далее. Во второй таблице(Адреса) у меня ФИО заказчика и его адрес. Допустим у меня в таблице заказов Иванов сделал несколько заказов, но потом он сменил адрес и чтоб адреса у каждой записи не исправлять, информация обновляется в табл заказоав, при изменении в таблице адресов...
А зачем их менять?
Для заказов которые уже не актуалны, т.е. либо заказчик отказался, либо товар ему уже доставлен, ничего менять нельзя. Иначе у вас история заказов политит, а если там были еще и доставки с учетом адреса то и подавно. Короче менять в этих случаях неправильно!
Для актуальных заказов, по хорошему, заказчик должен сам менять, либо делать для него (или админа/оператора) некий интерфейс, но с учетом понимания сути происходящего.
Вот примерно в таком русле.
RezchiK
29:01:2008, 16:21
А менять их надо для того, что преподователю так захотелось))) Я курсач делаю...точнее её прихать мне мешает его закончить(((
Для: sax_ol
А вот если я уберу эти связи в деск топе и приравняю поля в SQL запросвх в ибквере, то будет работать???
Всеравно, при изменении данных в таблице адресов, надо руками менять соответствующие данные в заказах.
Ну а если на то пошло (преподователю так захотелось), то вы сделайте проще, не держите в заказах никаких дублируищих полей, а только ссылку на запись в адресах, а в поля ввода просто джойните (подставлять по связи).
RezchiK
29:01:2008, 16:40
Для: sax_ol
Ну у меня примерно так же было, как Вы говорите, просто препод сказал переделать, вот завтра возьму под руку преподователя по БД и будем ей вдвоём доказывать, что так базу реализовать нельзя)))
Для:
RezchiKТут дело не в нельзя (в принципе можно все, ну конечно же кроме того что нельзя

), а в том, что это глупо и неправильно, с точки зрения нормальной логики, хотя конечно, у каждого своя степень нормали.
Вот такоq вопрос мешает жить, как в DBGrid, в определённом поле задать маску ввода для даты(в прадоксовской таблице стоит D-дата), а то при введении некорректных данных прога гопчится(((
Зарание большое благодарю!!!)))
Silver Wind
4:02:2008, 09:30
Цитата(RezchiK @ 3:02:2008, 14:25 )
Вот такоq вопрос мешает жить, как в DBGrid, в определённом поле задать маску ввода для даты
Маска ввода задается не в DBGrid а в соответствующем TField. Свойство EditMask: TEditMask;
Удалено модератором - спам
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.