madfallos Свободен |
04-04-2007 - 19:23 Начал писать базу на Delphi 7 вот первая форма: unit MyForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MyModule, ComCtrls, StdCtrls, Mask, DBCtrls, Grids, DBGrids, ExtCtrls; type TForm1 = class(TForm) PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBEdit4: TDBEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; DBMemo1: TDBMemo; Label6: TLabel; DBCheckBox1: TDBCheckBox; DBCheckBox2: TDBCheckBox; DBEdit5: TDBEdit; DBEdit6: TDBEdit; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; TabSheet7: TTabSheet; Button1: TButton; DBComboBox1: TDBComboBox; DBComboBox2: TDBComboBox; DBComboBox3: TDBComboBox; DBNavigator1: TDBNavigator; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; tab:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin DataModule2.Disp.Insert; tab:=tab+1; DataModule2.Disp.Fields[0].AsInteger:=tab; DataModule2.Disp.Fields[2].AsString:=DBEdit1.text; DataModule2.Disp.Fields[3].AsString:=DBEdit2.text; DataModule2.Disp.Fields[4].AsInteger:=StrToInt(DBEdit3.text); DataModule2.Disp.Fields[5].AsInteger:=StrToInt(DBEdit4.text); DataModule2.Disp.Fields[6].AsInteger:=StrToInt(DBEdit5.text); DataModule2.Disp.Fields[7].AsBoolean:=DBCheckBox2.checked; DataModule2.Disp.Fields[8].AsBoolean:=DBCheckBox1.checked; DataModule2.Disp.Fields[9].AsInteger:=StrToInt(DBEdit6.text); if DBMemo1.lines.Count > 0 then begin TBlobField(DataModule2.Disp.Fields[11]).BlobType:=ftMemo; TBlobField(DataModule2.Disp.Fields[11]).Assign(DBMemo1.Lines); end; DataModule2.Disp.Post; end; end. Вот такие ошибки выдает при компиляции: [Error] MyForm.pas(73): Undeclared identifier: 'TBlobField' [Error] MyForm.pas(73): Missing operator or semicolon [Error] MyForm.pas(74): Missing operator or semicolon [Fatal Error] MyProject.dpr(6): Could not compile used unit 'MyForm.pas' подскажите что делать, плизззз? ЗЫ: в пограммировании я почти чайник, и пишу по книге Бобровского "Delphi7.Учебный курс" |
||||||
kiskus Свободен |
06-04-2007 - 10:30 [Error] MyForm.pas(73): Missing operator or semicolon забыл поставить закрывающие точку с запятой в message box два раза кликни на сообшение об ошибке в окне кода подсветится строка с ошибкой в implementaion напиши Uses Unit2; - имя датамодуля Это сообщение отредактировал kiskus - 06-04-2007 - 10:39 |
||||||
madfallos Свободен |
06-04-2007 - 12:26 пасиб за совет Это сообщение отредактировал madfallos - 06-04-2007 - 12:30 |
||||||
madfallos Свободен |
15-04-2007 - 09:03 и снова вопрос: как создать связь один ко многим в Paradox? есть главная таблица с ключевым полем "табельный номер", и есть еще одна таблица (в ней тоже есть поле "табельный номер"), несколько записей которой должны соответствовать одной записи в главной таблице. ЗЫ: ни в одной книге не написано как это сделать (прям по шагам) :((( |
||||||
kiskus Свободен |
16-04-2007 - 12:33 Подчиненная таблица должна быть проиндексирована по полю по которому будет вестись связь с главной таблицей. Далее: 1.На форме или в датамодуле создаем компоненты (для примера) Table1 и table 2 table1-мастер, прописываем названия дата базы и имя таблицы table2-подчиненная таблица, прописываем названия дата базы и имя таблицы кидаем 2 datasource и прописываем каждый к своей таблице 2.открываем окно objekt Tree viev 3.в окне кодировщика переходим на закладку (diagram), должна быть открыта страница или формы или датамодуля 4.из окна Tree viev мышкой тянем на окно кодировщика название мастер таблицы, в окне кодировщика должен появиться прямоугольник с названием вашей мастер таблицы.То же делаем и для подчиненной таблицы 5.нажимаем кнопку master/detail connektor в верхней части окна около "глаза" мышкой целимся в главную таблицу, курсор будет крестиком, нажимаем левую клавишу мыши и тянем на подчинённую таблицу откроется окно Field link desinger. В правой части указываем мастер поле в левой части указываем название подчиненного поля, вернее индекса Жмем Add потом OK Всё связь Master - detail установлена. Это сообщение отредактировал kiskus - 16-04-2007 - 12:35 |
||||||
madfallos Свободен |
19-04-2007 - 16:00 и снова проблемы :) как отфильтровать таблицу по полю, но только данные в это поле вводятся так: из комбобокса на 1 форме в переменную, затем по кнопке на другой форме из переменной в поле...ну и соответственно фильтр надо поставить на переменную...т.к. она меняться будет в последующем..но так чето не получается... |
||||||
kiskus Свободен |
19-04-2007 - 17:46 Фильтр в БД применяется при открытии таблиц. Непонятно, куда ставится фильтр, или на значеня поля, или на переменную при вводе. |
||||||
madfallos Свободен |
20-04-2007 - 07:11 фильтр нужно сделать по полю, данные в которое вводятся из переменной, юзер набирает в форме число, оно уходит в переменную, затем при нажатии кнопки "Сохранить запись" на другой форме эта переменная записывается в текущую запись в нужное поле главной таблицы и я вычитал, что в датамодуле в свойстве Filter нужной таблицы надо писать <имя поля>=1, а мне надо <имя поля>=peremennaya...что собственно не получается...делфя понимает что это не переменная, а слово "peremennaya", находящееся в записях поля..и естессно не находит ничего, выдает ошибки, т.к. там цифры... как быть? |
||||||
kiskus Свободен |
23-04-2007 - 12:34 Саммый простой способ отследить на уровне приложения то ,что вводит пользователь. Пример: Если через переменную и переменная цифра то case PEREMM {переменная} of 1..100:begin //делаем что то в диапазоне 1..100 end; 100,110,120:begin //делаем что то при совпадении 100,110,120 end; else //делаем что то при несовпадении end; Фильтр на таблицу: Фильтр срабатывает только при открытии таблицы Table1.Close; Table1.Filter:='Название поля =' + QuotedStr(inttostr(PEREMM)) Table1.Filtered:=True; Table1.Open Таблица будет отфильтрована по полю -"Название поля" и значению переменной PEREMM. Не забывайте производить приведение типа данных в выражении фильтра Выражение всегда строка. |
||||||
madfallos Свободен |
24-04-2007 - 12:09 пасиб, я попробовал через SQL...параметрический запрос...и получилось :) но все равно спасибо |
||||||
madfallos Свободен |
09-05-2007 - 13:33 И снова проблема… Имеем две формы, на одной стоит куча Edit’ов и прочей мелочи для ввода данных в базу, на второй – DBGrid, привязанный к той же базе для общего просмотра (точнее привязана к SQL-запросу), как сделать, чтобы при клике на одной из записей в таблице во второй форме выходила первая форма для ее редактирования. |
||||||
kiskus Свободен |
10-05-2007 - 09:12 Нужно отработать событие DbGrida - onDblClick |
||||||
madfallos Свободен |
10-05-2007 - 14:26 а как попасть на нужную запись? |
||||||
kiskus Свободен |
10-05-2007 - 17:07 Попасть на нужную запись можно методом поиска в Бд пример: Table1 - таблица с основной Бд Query1 - таблица запроса Метод Locate: table1.locate('Поле поиска',переменная с данными для поиска,[]); возвращает true в случае успеха. Table1.Locate('Поле поиска',Query1.FieldValues['Имя поля с данными'],[]); Если поле поиска индексировано, то используется индекс. Работает быстро только на маленьких таблицах. Можно искать в Query. Метод Goto Key: Самый быстрый индексный поиск table1.IndexName:='Индекс поля'; Table1.SetKey; Table1.FieldByName('Имя поля поиска').AsString:=Query1.FieldValues['Имя поля с данными']; Table1.GotoKey; Поле для поиска должно быть проиндексировано. Таблицы открыты. Table1.FieldByName('Имя поля поиска').AsString <- тип данных поля поиска типы данных полей должны совпадать. F1 помощь |
||||||
madfallos Свободен |
13-05-2007 - 17:15 Интересует еще один вопрос: При попытке удалить запись из главной таблице выходит сообщение о том, что в подчиненной таблице есть связанные с ней (главной записью) записи и соответственно ничего не получается :(((, как удалить запись из главной таблицы вместе с записями подчиненной??? |
||||||
kiskus Свободен |
14-05-2007 - 13:53 Закрыть подчиненную таблицу и удалить запись в главной |
||||||
madfallos Свободен |
21-05-2007 - 17:50 проблема такая: создал параметрический запрос который выбирает диапазон дат
в коде написал
и при попытке сделать запрос активным в инспекторе выдает ошибку Disp: Field 'data1' not found че за дела??? это же не поле а параметр |
||||||
shurakrkn Свободен |
23-05-2007 - 10:40
либо попробуй заглавными буквами указать имя параметров, либо ты не сделал fetch параметров. |
||||||
kiskus Свободен |
24-05-2007 - 09:05 SELECT Adres, Dom, Pojar, Facticheski, Data_CUS, Data_pojar FROM "Disp.DB" Disp WHERE (Pojar = TRUE) and (Data_CUS>=QuotedStr(MaskEdit1.Text+' '+ComboBox1.text))and (Data_CUS<=QuotedStr(MaskEdit2.Text+' '+ComboBox2.text)) |
||||||
shurakrkn Свободен |
24-05-2007 - 11:10
ну блин вы даете, это каждый раз переписывать запрос? А если он захочет из других едитов инициализировать запрос, ему что, нужно формировать руками каждый раз? Нужон либо вызов fetchparam (или fetchparams не помню точно), либо делается в самом компоненте извлечение параметров из запроса. |
||||||
kiskus Свободен |
24-05-2007 - 11:38 Запрос можно оформить процедурой и передавать значения едитов |
||||||
madfallos Свободен |
06-06-2007 - 11:20 очередной вопрос :) как записать несколько полей из Query1 в поле Memo отдельно взятой таблицы, так чтобы после некоторых полей осуществлялся перевод на новую строку.... я сделал без перевода на след строку: datamodule2.svodka.FieldByName('osnova').AsString:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+' '+query1Facticheski.AsString; а нужно: datamodule2.svodka.FieldByName('osnova').AsString:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+'вот тут перевод'+query1Facticheski.AsString; как это сделать??? и вообще правильно ли я обращаюсь к полю мемо (как к строке)? |
||||||
shurakrkn Свободен |
08-06-2007 - 13:17
не знаю, как в дельфи, а в билдере стандартный символ перевода строки добавляется '\n', может также и в дельфях работает. |
||||||
maxdiversexnarod1 Свободен |
08-06-2007 - 14:05 madfallos shurakrkn Я не совсем понял вопрос, но если нужно сделать перевод строки, то в Delphi используется последовательность #13#10 (коды перевода строки). Например так: 'a'#13#10'b' Прошу обратить внимание на то, что коды записаны вне кавычек. Насчёт \n - никогда не слышал, чтобы в Delphi это работало. У меня Delphi 7.0 - там не работает. Хотя, возможно, я отстал от жизни В последних версиях Delphi передирают из C++ всё подряд, возможно, что и это тоже появилось. Это сообщение отредактировал maxdiversexnarod1 - 08-06-2007 - 14:08 |
||||||
kiskus Свободен |
13-06-2007 - 09:11 datamodule2.svodka.FieldByName('osnova').AsString:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+ #13+query1Facticheski.AsString; Или var stroka:string; stroka:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+ #13+query1Facticheski.AsString; datamodule2.svodka.FieldByName('osnova').AsString:=stroka; Это сообщение отредактировал kiskus - 13-06-2007 - 09:14 |
||||||
madfallos Свободен |
20-06-2007 - 16:08 и снова проблема: в одном из модулей нужно посчитать кол-во записей в таблице перевожу таблицу на первую запись пишу цикл от 1 до рекордкаунт в нем инкриментирую переменную но почему то именно с этой таблицей глюк, пишет, что кол-во записей 1 (даже вывел рекордкаунт на экран, пишет 1), хотя в реале 4 че за дела????? |
||||||
kiskus Свободен |
21-06-2007 - 09:04 количество записей в таблице это и есть RecordCount; var kol_zap:integer; kol_zap:=table1.RecordCount; или sql запросом Query1.close; Query1.sql.clear; Query1.sql.add('select count(*)kz from 'Имя таблицы' '); Query1.open kolzap:=Query1.FieldValues['kz']; или через цикл (Китайский способ ИМХО) kol_zap:=0; table1.first; <-Поставить таблицу на первую запись while not table1.eof do begin inc(kol_zap); table1.next; end; Это сообщение отредактировал kiskus - 21-06-2007 - 09:06 |
||||||
madfallos Свободен |
21-06-2007 - 15:59 про то, что рекорд каунт это кол-во записей я знаю :) у меня переменная инкрементируется только по условию...забыл сказать :) |
||||||
madfallos Свободен |
22-06-2007 - 19:40 У меня снова проблема: при создании дистрибутива программой InstallShield Express Borland Limited Edition на последнем шаге тестируя инсталляху, а точнее уже при копировании файлов на диск выдает такие 2 ошибки: Internal Error 25001.1615: Registration Costing:: CostAllISSelfRegEntries::MsiDatabaseOpenView(hDatabase, _T(Select * from ISSelfReg”),hView) Internal Error 25001. 6 Registration Costing:: CostAllISSelfRegEntries::MsiViewExecute(hView,NULL) самое интересное, что прога устанавливается нормально после нажатия ОК на окнах с этими ошибками…. И еще подвопрос: я не в курсе, надо мне дополнительно устанавливать BDEAdmin на комп, в который инсталлирую прогу. Так как на 2м этапе в пункте Objects/MergeModules стоят галочки на BaseRTL, BDE_ENT, DatabaseRTL |
||||||
madfallos Свободен |
24-06-2007 - 09:28 вопросик такой: что за файл .TV в папке с базами данных и с чем его едят???? |
||||||
kiskus Свободен |
25-06-2007 - 09:32 Вот программа создания инсталляционных пакетов - Wise Installation System, BDE и алиасы можно установить в выходной файл. Работает без проблем. BDE Admin -приложение для конфигурации драйвера BDE. Если BDE уже стоит,то и устанавливать не нужно. .TV - временный файл создаваемый DBD32. Не заморачивайся. |
||||||
do-do Свободен |
25-06-2007 - 19:47 Попросили покопаться в самопальной базе данных. Написана неизвестно на чем. Расширение файлов VAD (вроде так по телефону услыхал) Может кто знает, чье это расширение - иль нечто самобытное ? Возможно, базы могут содержать звуковые фрагменты.....но это вопрос Это сообщение отредактировал do-do - 25-06-2007 - 19:49 |
||||||
alexfarm Свободен |
26-11-2009 - 08:07 Пример программы для работы с базой данных из книги Бобровского С. на странице 340 действительно не работает. Выдается ошибка при приведении к типу тблобфиелд. Решение такое: Я добавил на форму 5 таблицу и запустил программу. И всё заработало. Потом эту таблицу удалил. Всё по прежнему работает. Видимо с добавлением таблицы автоматически к модулю 5 подключились дополнительные модули, которые уже позволили работать с блоб-полями. |