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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2015, 11:33   #11
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию

p.s. вопрос был риторическим да, собственно я и ответил на него в предыдущем посте...
water_ вне форума Ответить с цитированием
Старый 06.03.2015, 16:30   #12
trojan218
Пользователь
 
Регистрация: 21.02.2015
Сообщений: 12
По умолчанию

water_
переименовал таблицы и дата модули, из Unit1 при сохранение возникла окно с некорректными данными, после подтверждения оно удалило строки:
Цитата:
Purchases: TGroupBox;
Books: TGroupBox;
Deliveries: TGroupBox;
Authors: TGroupBox;
Publishing_house: TGroupBox;
т.к. делфи их не знает, возникли перечисленные ошибки.
Где можно посмотреть текущее имя для записи, чтобы привести его к виду:
Цитата:
Purchases: TADOTable;
Books: TADOTable;
Authors: TADOTable;
Deliveries: TADOTable;
Publishing_house: TADOTable;
P.S. спасибо что помогаете мне

такая ошибка возникает при создание записей
Цитата:
tblPurchases: TADOTable;
tblBooks: TADOTable;
tblAuthors: TADOTable;
tblDeliveries: TADOTable;
tblPublishing_house: TADOTable;
и в событии
Цитата:
begin
if FirstShow then
begin
FirstShow:=False;
tblPurchases.Active:=true;
tblBooks.Active:=true;
tblAuthors.Active:=true;
tblDeliveries.Active:=true;
tblPublishing_house.Active:=true;
end;


end;
Помогите пожалуйста разобраться..
trojan218 вне форума Ответить с цитированием
Старый 06.03.2015, 21:45   #13
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию

Цитата:
Сообщение от trojan218 Посмотреть сообщение
эта ошибка говорит о том что для объявленных компонентов нет соответствий на форме, а раз их нет значит нужно удалить

компоненты, созданные в design-time, в частности TGroupBox и TADOTable, которые здесь используются, необходимо переименовывать в свойстве name каждого компонента, а не в самом коде

хмм... таблицы объявлены в другом модуле
...лучше сделать так
Код:
  with DataModule2 do begin
    tblPurchases.Active:=true;
    tblBooks.Active:=true;
    tblAuthors.Active:=true;
    tblDeliveries.Active:=true;
    tblPublishing_house.Active:=true;
  end;
water_ вне форума Ответить с цитированием
Старый 06.03.2015, 23:12   #14
trojan218
Пользователь
 
Регистрация: 21.02.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от water_ Посмотреть сообщение
эта ошибка говорит о том что для объявленных компонентов нет соответствий на форме, а раз их нет значит нужно удалить

компоненты, созданные в design-time, в частности TGroupBox и TADOTable, которые здесь используются, необходимо переименовывать в свойстве name каждого компонента, а не в самом коде

хмм... таблицы объявлены в другом модуле
...лучше сделать так
Код:
  with DataModule2 do begin
    tblPurchases.Active:=true;
    tblBooks.Active:=true;
    tblAuthors.Active:=true;
    tblDeliveries.Active:=true;
    tblPublishing_house.Active:=true;
  end;
то есть мне нужно каждый раз указывать "with DataModule2 do begin" чтобы переменые запрашивались из 2 таблицы?
если так то
подойдёт ли мне запрос для кнопки удаления выделенной ячейки?
Цитата:
procedureTForm1.Button2Click(Sender : TObject);
begin
try
if Application.MessageBox('Delete?','A DO',MB_YESNO)=IDYES then
begin
ADOQuery1.Delete;
end;
except
on e:Exception do
end;
end;
и не возникнет ли конфликта в уже существующих записях?
в таком виде
Цитата:
implementation

uses
Unit3;

{$R *.dfm}
var
FirstShow: Boolean=true;




procedure TForm1.FormShow(Sender: TObject);


begin
if FirstShow then
FirstShow:=False;
with DM do begin
tblPurchases.Active:=true;
tblBooks.Active:=true;
tblAuthors.Active:=true;
tblDeliveries.Active:=true;
tblPublishing_house.Active:=true;
end;

end;
не запустилась программа возникли следующие ошибки:
Цитата:
[Error] Unit1.pas(53): Undeclared identifier: 'tblPurchases'
[Error] Unit1.pas(53): Missing operator or semicolon
[Error] Unit1.pas(54): Undeclared identifier: 'tblBooks'
[Error] Unit1.pas(54): Cannot assign to a read-only property
[Error] Unit1.pas(55): Undeclared identifier: 'tblAuthors'
[Error] Unit1.pas(55): Missing operator or semicolon
[Error] Unit1.pas(56): Undeclared identifier: 'tblDeliveries'
[Error] Unit1.pas(56): Missing operator or semicolon
[Error] Unit1.pas(57): Undeclared identifier: 'tblPublishing_house'
[Error] Unit1.pas(57): Missing operator or semicolon
[Fatal Error] pp.dpr(7): Could not compile used unit 'Unit1.pas'
не удивляйтесь, задачу уже переписал, подумав что где-то накосячил.
как указать переменные из другого юнита?

Последний раз редактировалось trojan218; 06.03.2015 в 23:44.
trojan218 вне форума Ответить с цитированием
Старый 06.03.2015, 23:49   #15
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию

Цитата:
каждый раз указывать "with DataModule2 do begin" чтобы переменые запрашивались из 2 таблицы?
хороший вопрос.

нужно разделить "роли" между модулями, в данном примере на модуль работы с БД и модуль "внешнего вида"

и все действия, которые происходят с таблицами и запросами (да и со всем что находится в DataModule2), выполни в отдельных процедурах DataModule2

Код:
procedure TDataModule2.DeleteFromTbl1;
begin
  //выполнение запроса удаления
end;

function TDataModule2.getBooksCount(author: string): integer;
begin
  //выполнение запроса на получение количества книг конкретного автора
end;
а в модуле ("внешнего вида" твоей программы) с формой и гридами вызывай эти процедуры

Код:
procedure TForm1.btndeleteClick(Sender: TObject);
begin
  DataModule2.DeleteFromTbl1;
end;
помимо того что это улучшит читабельность кода а значит легче будет его править, так и в случае необходимости особенно удачные модули можно использовать в других программах...
water_ вне форума Ответить с цитированием
Старый 06.03.2015, 23:57   #16
trojan218
Пользователь
 
Регистрация: 21.02.2015
Сообщений: 12
По умолчанию

то есть с formshow также в Unit 3 создать процедуру и за тем запросить её в юнит1?
trojan218 вне форума Ответить с цитированием
Старый 07.03.2015, 08:45   #17
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию

Цитата:
то есть с formshow также в Unit 3 создать процедуру и за тем запросить её в юнит1?
у тебя TDataModule2 в unit3? тогда да в нем и создавай

Цитата:
не запустилась программа возникли следующие ошибки
опять не объявленный идентификатор... закинь сюда программу посмотрим...
water_ вне форума Ответить с цитированием
Старый 07.03.2015, 13:41   #18
trojan218
Пользователь
 
Регистрация: 21.02.2015
Сообщений: 12
По умолчанию

Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids;

type
TForm1 = class(TForm)
grp1: TGroupBox;
grp2: TGroupBox;
grp3: TGroupBox;
grp4: TGroupBox;
grp5: TGroupBox;
dbgrd2: TDBGrid;
dbgrd3: TDBGrid;
dbgrd4: TDBGrid;
dbgrd5: TDBGrid;
btn1: TButton;
btn2: TButton;
dbgrd1: TDBGrid;


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses
Unit3;

{$R *.dfm}
var
FirstShow: Boolean=true;
end.
Цитата:
unit Unit3;

interface

uses
SysUtils, Classes, ADODB, DB;

type
TDM = class(TDataModule)
con1: TADOConnection;
qry1: TADOQuery;
tblPokupki: TADOTable;
tblSpravBook: TADOTable;
tblSpravAvtor: TADOTable;
tblSpravIzdat: TADOTable;
dsPokupki: TDataSource;
dsSpravBook: TDataSource;
tblSpravPostav: TADOTable;
dsSpravPostav: TDataSource;
dsSpravAvtor: TDataSource;
dsSpravIzdat: TDataSource;
intgrfldSpravBookCode_book: TIntegerField;
wdstrngfldSpravBookTitle_book: TWideStringField;
intgrfldSpravBookCode_author: TIntegerField;
intgrfldSpravBookPages: TIntegerField;
intgrfldSpravBookCode_publish: TIntegerField;
intgrfldSpravPostavCode_delivery: TIntegerField;
wdstrngfldSpravPostavName_delivery: TWideStringField;
wdstrngfldSpravPostavName_company: TWideStringField;
wdstrngfldSpravPostavAddress: TWideStringField;
wdstrngfldSpravPostavPhone: TWideStringField;
wdstrngfldSpravPostavINN: TWideStringField;
intgrfldSpravAvtorCode_author: TIntegerField;
wdstrngfldSpravAvtorName_author: TWideStringField;
dtmfldSpravAvtorBirthday: TDateTimeField;
intgrfldSpravIzdatCode_publish: TIntegerField;
wdstrngfldSpravIzdatPublish: TWideStringField;
wdstrngfldSpravIzdatCity: TWideStringField;
atncfldPokupkiDSDesigner: TAutoIncField;
intgrfldPokupkiCode_book: TIntegerField;
dtmfldPokupkiDate_order: TDateTimeField;
intgrfldPokupkiCode_delvery: TIntegerField;
blnfldPokupkiTaype_purchases: TBooleanField;
bcdfldPokupkiCost: TBCDField;
intgrfldPokupkiAmaunt: TIntegerField;
intgrfldPokupkiCode_Purchases: TIntegerField;

private
{ Private declarations }
public
{ Public declarations }
end;

var
DM: TDM;

implementation

{$R *.dfm}


end.

сама программа https://yadi.sk/d/Ghij2l8Hf6AjM
в программе нужно будет сделать 10 запросов различных:
типо Выбрать из таблицы Deliveries список поставщиков (поля Name_delivery, Phone и INN), отсортировать результат по полю INN (по убыванию).
посмотрите саму программу пожалуйста и подскажите как реализовать запросы идеи были насчёт меню и кнопки. В меню номера запросов и по нажатию результат, а кнопка, как новая форма со стрелками перехода по запросам. Думаю вариант с меню будет проще реализовать На основе вашего примера (работающего) буду хотя бы иметь предстовления. Некоторые поля адаптировал для себя

Последний раз редактировалось trojan218; 07.03.2015 в 14:01.
trojan218 вне форума Ответить с цитированием
Старый 10.03.2015, 11:26   #19
trojan218
Пользователь
 
Регистрация: 21.02.2015
Сообщений: 12
По умолчанию

water_ поможете?
trojan218 вне форума Ответить с цитированием
Старый 10.03.2015, 11:38   #20
water_
Пользователь
 
Регистрация: 01.11.2013
Сообщений: 34
По умолчанию

судя по описанной задаче, нет необходимости выводить все таблицы с данными разом, возможно стоит использовать один query и в зависимости от запроса выводить в одной и той же таблице выборку данных

p.s. пример программы в лс
water_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает поиск по бд Access на основе sql приложение написано в delphi Elizaveta007 БД в Delphi 4 19.08.2013 10:10
Диагностика уровня закритичности конвективного течения на основе численного решения задачи Релея -Бенара(Делфи) Эльвира91 Помощь студентам 3 15.03.2013 17:27
Классификация элементов модели разреза скважины на основе метода главных компонент( Делфи) Эльвира91 Помощь студентам 0 14.02.2013 18:56
Делфи и access Zhenya666 Помощь студентам 1 30.04.2012 09:54
MS Access вывод отчёта на основе данных формы katrina-n Помощь студентам 0 29.11.2009 18:40