Dbgrid и Table

  • Автор темы RezchiK
  • Дата начала
R

RezchiK

#1
Может кто знает как сделать вот такую хитрожёлтую вещь:
У меня в табилце первое поле, это "номер заказа"всё вводится вот таким макаром:

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;

как мне сделать чтоб при последующем заполнении поля "номер заказа" он выдал масагу мол так и так, вообщем такой номер уже есть))), если запись с таким"номером заказа" уже имеется...

И вот такой ещё квейшенс...как это можно сделать: я задаю номер заказа и прога выдаёт мне всё по этому заказу(нужно для печати). Зарание благодарю :) ;) :)
 
B

Barmutik

#3
Немного смущает отсутствие Post после того как все данные в запись были включены...
 
S

SNike

#4
<!--QuoteBegin-RezchiK+22:01:2008, 17:54 -->
<span class="vbquote">(RezchiK @ 22:01:2008, 17:54 )</span><!--QuoteEBegin-->как мне сделать чтоб при последующем заполнении поля "номер заказа" он выдал масагу мол так и так, вообщем такой номер уже есть))), если запись с таким"номером заказа" уже имеется..
[snapback]94550" rel="nofollow" target="_blank[/snapback]​
[/quote]

Так сделай поле номера заказа ключевым типа автоинкремента (или генератор и т.п., смотря что за база) чтоб само увеличивалось. Или отдельным запросом поищи - есть такой номер в базе или нет

<!--QuoteBegin-RezchiK+22:01:2008, 17:54 -->
<span class="vbquote">(RezchiK @ 22:01:2008, 17:54 )</span><!--QuoteEBegin-->я задаю номер заказа и прога выдаёт мне всё по этому заказу(нужно для печати)
[snapback]94550" rel="nofollow" target="_blank[/snapback]​
[/quote]

Тут тебе поможет связка Master - Detail. Или запрос с параметрами.

А еще советую отказаться от обращения к полю по его номеру (Fields[8], к примеру), а то если изменится порядок полей - то наступит день просветления :) Лучше используй FieldByName.
 
R

RezchiK

#5
База в чём у меня я не знаю(как-то не разабрался), но таблици я делал в Database Desktop и регистрировал её потом в Database Explorer...сейчас весь код переделал, так как связал dbedit с соответствующими полями таблицы и уже сними буду осуществлять поиск и печать...

Я сделал прощё, если в базе есть номер заказа, то он выдаст информацию по этому заказу, а если нет, то выдаст сответствующее сообщение...вот только ещё надо поставить там комбобокс в котором
можно было б выбрать картинку изделия, и она тоже пойдёт на печать...
 
R

root

#6
Для: RezchiK
Совет в delphi есть демки посмотри их там все очень просто и наглядно показано, тем более что у тебя тоже база paradox
Если будут сложности тогад кидай на форум, но с начала попробуй сам разобраться :)
 
S

SNike

#7
<!--QuoteBegin-RezchiK+23:01:2008, 11:59 -->
<span class="vbquote">(RezchiK @ 23:01:2008, 11:59 )</span><!--QuoteEBegin-->База в чём у меня я не знаю
[snapback]94665" rel="nofollow" target="_blank[/snapback]​
[/quote]

Нда... Без комментариев :)
 
R

RezchiK

#9
Для: 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;

каждое поле привизал к полю таблицы, но при открытии формы, поля всё равно не очищаются(((
 
R
#10
Для: RezchiK
у таблицы свойство активате отключи при включенном он позиционирует на первой записи таблицы
Use TDBEdit to enable users to edit a database field. TDBEdit uses the Text property to represent the contents of the field.
=> что это только инструмент для отображения записи поля таблицы если ты хочешь при открытии удалить определенный записи то тебе необходимо прейти в режим редактирования "EDIT"
 
R

RezchiK

#11
Для: root
у таблицы свойство активате отключи при включенном он позиционирует на первой записи таблицы
так если я отключу свойство active, то записи не будут записыватся в таблицу, а точнее даже данные нельзя будет внести)))
=> что это только инструмент для отображения записи поля таблицы если ты хочешь при открытии удалить определенный записи то тебе необходимо прейти в режим редактирования "EDIT"
Это как если не секрет???)))
 
R
#12
Для: RezchiK
table1.edit;
dbedit1.clear;
table1.post;
B вообще тогда зачем clear-ить? мож тогда другой подход нужен ?
 
R

RezchiK

#13
Для: root
Видишь у меня какая штука выходит: я открываю эту форму __________.JPG
и там я заполняю данные, так сказать оформляю заказ и распечатываю его, также на ней я ищу по номеру заказа все данные, поэтому в событии OnCreate мне нужно написать очистку полей...

Я просто занимаюсь резьбой по дереву и курсач выбрал такой, чтоб для себя можно было бы использовать(потом хочу его прообгрейдить и на диплом...), так сказать свободная тема, вот теперь мучаюсь и задаю себе вопрос почему же я не как все: выбрал бы себе тему, скачал исходник, поправил интерфейс и был бы доволен, когда этот курсач допуск к сессии, которая уже почти закончилаь, ну нечего-прорвусь, где наша не пропадала :) ;) :)
 

Вложения

Z

Zanka

#14
Проверка на уже существующий заказ:
Сначала запиши в переменные свои Edit-ы:
field1:=Edit2.Text; // заказчик
field2 :=Edit3.Text
Потом ищем их в базе
if DataModule1.TableGlavn1.Locate('имя_поля1;имя_поля2;...',VarArrayOf([field1,field2]),[])
then
ShowMessage('такой номер уже есть)))!')
else...
 
R

RezchiK

#15
Для: Zanka
Проверка на уже существующий заказ:
Сначала запиши в переменные свои Edit-ы:
field1:=Edit2.Text; // заказчик
field2 :=Edit3.Text
Потом ищем их в базе
if DataModule1.TableGlavn1.Locate('имя_поля1;имя_поля2;...',VarArrayOf([field1,field2]),[])
then
ShowMessage('такой номер уже есть)))!')
else...
Спасибо за совет, но я сделал прощё, так как всё таки тема свободная, я сделал заполнение таблиц на отдельной форме, где можно будет просматривать и редактировать все базы...а на той форме, что на рисунке я с помощью кнопки "введите номер заказа" я просто вывожу нужные записи...
 
R

RezchiK

#16
У меня такая невезуха с фильтрацией БД-точнее она не выполняется((( создал вторичные ключи у полей '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;
 
R

RezchiK

#17
Уже разобрался))) просто надо было в таблице у вторичных индексов галочку у свойства уникальный убрать и всё заработало)))
 
R

RezchiK

#18
Вот ещё такой вопросец, никак нее могу догнать как делать связи с таблицами в 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, но там к сожелению нет соответствующих картинок из раздела связей...может у кго они есть-поделитесь:D:):)
 
R

RezchiK

#19
Таблицы:
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 из таблицы 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'.
 
R

RezchiK

#20
Ну вообщем дело было так: В одной таблице(Заказы) записывается номер заказа, ФИО заказчика, дата изготовления и так далее. Во второй таблице(Адреса) у меня ФИО заказчика и его адрес. Допустим у меня в таблице заказов Иванов сделал несколько заказов, но потом он сменил адрес и чтоб адреса у каждой записи не исправлять, информация обновляется в табл заказоав, при изменении в таблице адресов...