Взрослая социальная сеть
Текстовая версия форума
Знакомства для секса Регистрация


Помогите разобраться с БД

Текстовая версия форума: Архив компьютерного форума



Полная версия топика:
Помогите разобраться с БД -> Архив компьютерного форума


Страницы: [1]

madfallos
Начал писать базу на 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
[Error] MyForm.pas(73): Missing operator or semicolon
забыл поставить закрывающие точку с запятой

в message box два раза кликни на сообшение об ошибке
в окне кода подсветится строка с ошибкой

в implementaion
напиши Uses Unit2; - имя датамодуля

Это сообщение отредактировал kiskus - 06-04-2007 - 10:39
madfallos
пасиб за совет 0096.gif

Это сообщение отредактировал madfallos - 06-04-2007 - 12:30
madfallos
и снова вопрос:
как создать связь один ко многим в Paradox?
есть главная таблица с ключевым полем "табельный номер", и есть еще одна таблица (в ней тоже есть поле "табельный номер"), несколько записей которой должны соответствовать одной записи в главной таблице.
ЗЫ: ни в одной книге не написано как это сделать (прям по шагам) :(((
kiskus
Подчиненная таблица должна быть проиндексирована по полю
по которому будет вестись связь с главной таблицей.
Далее:

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
и снова проблемы :)
как отфильтровать таблицу по полю, но только данные в это поле вводятся так: из комбобокса на 1 форме в переменную, затем по кнопке на другой форме из переменной в поле...ну и соответственно фильтр надо поставить на переменную...т.к. она меняться будет в последующем..но так чето не получается...
kiskus
Фильтр в БД применяется при открытии таблиц.
Непонятно, куда ставится фильтр, или на значеня поля, или на переменную при вводе.
madfallos
фильтр нужно сделать по полю, данные в которое вводятся из переменной, юзер набирает в форме число, оно уходит в переменную, затем при нажатии кнопки "Сохранить запись" на другой форме эта переменная записывается в текущую запись в нужное поле главной таблицы и я вычитал, что в датамодуле в свойстве Filter нужной таблицы надо писать <имя поля>=1, а мне надо <имя поля>=peremennaya...что собственно не получается...делфя понимает что это не переменная, а слово "peremennaya", находящееся в записях поля..и естессно не находит ничего, выдает ошибки, т.к. там цифры... как быть?
kiskus
Саммый простой способ отследить на уровне приложения то ,что вводит пользователь.
Пример:
Если через переменную и переменная цифра то

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
пасиб, я попробовал через SQL...параметрический запрос...и получилось :)
но все равно спасибо
madfallos
И снова проблема…
Имеем две формы, на одной стоит куча Edit’ов и прочей мелочи для ввода данных в базу, на второй – DBGrid, привязанный к той же базе для общего просмотра (точнее привязана к SQL-запросу), как сделать, чтобы при клике на одной из записей в таблице во второй форме выходила первая форма для ее редактирования.
kiskus
Нужно отработать событие DbGrida - onDblClick


madfallos
а как попасть на нужную запись?
kiskus
Попасть на нужную запись можно методом поиска в Бд
пример:

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
Интересует еще один вопрос:
При попытке удалить запись из главной таблице выходит сообщение о том, что в подчиненной таблице есть связанные с ней (главной записью) записи и соответственно ничего не получается :(((, как удалить запись из главной таблицы вместе с записями подчиненной???
kiskus
Закрыть подчиненную таблицу и удалить запись в главной
madfallos
проблема такая: создал параметрический запрос который выбирает диапазон дат

CODE
SELECT Adres, Dom, Pojar, Facticheski, Data_CUS, Data_pojar
FROM "Disp.DB" Disp
WHERE  Pojar = TRUE and Data_CUS>=:data1 and Data_CUS<=:data2


в коде написал

CODE
with Query1 do
begin
close;
query1.ParamByName('data1').Value:=strtodatetime(MaskEdit1.Text+' '+ComboBox1.text);
query1.ParamByName('data2').Value:=strtodatetime(MaskEdit2.Text+' '+ComboBox2.text);
open;
end;


и при попытке сделать запрос активным в инспекторе выдает ошибку Disp: Field 'data1' not found
че за дела??? это же не поле а параметр
shurakrkn
QUOTE (madfallos @ 21.05.2007 - время: 17:50)
проблема такая: создал параметрический запрос который выбирает диапазон дат

CODE
SELECT Adres, Dom, Pojar, Facticheski, Data_CUS, Data_pojar
FROM "Disp.DB" Disp
WHERE  Pojar = TRUE and Data_CUS>=:data1 and Data_CUS<=:data2


в коде написал

CODE
with Query1 do
begin
close;
query1.ParamByName('data1').Value:=strtodatetime(MaskEdit1.Text+' '+ComboBox1.text);
query1.ParamByName('data2').Value:=strtodatetime(MaskEdit2.Text+' '+ComboBox2.text);
open;
end;


и при попытке сделать запрос активным в инспекторе выдает ошибку Disp: Field 'data1' not found
че за дела??? это же не поле а параметр

либо попробуй заглавными буквами указать имя параметров, либо ты не сделал fetch параметров.
kiskus


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
QUOTE (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))

ну блин вы даете, это каждый раз переписывать запрос? А если он захочет из других едитов инициализировать запрос, ему что, нужно формировать руками каждый раз? Нужон либо вызов fetchparam (или fetchparams не помню точно), либо делается в самом компоненте извлечение параметров из запроса.
kiskus
Запрос можно оформить процедурой и передавать значения едитов
madfallos
очередной вопрос :)
как записать несколько полей из 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
QUOTE (madfallos @ 06.06.2007 - время: 11:20)
а нужно:
datamodule2.svodka.FieldByName('osnova').AsString:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+'вот тут перевод'+query1Facticheski.AsString;

как это сделать??? и вообще правильно ли я обращаюсь к полю мемо (как к строке)?

не знаю, как в дельфи, а в билдере стандартный символ перевода строки добавляется '\n', может также и в дельфях работает.
maxdiversexnarod1
madfallos
shurakrkn
Я не совсем понял вопрос, но если нужно сделать перевод строки, то в Delphi используется последовательность #13#10 (коды перевода строки).
Например так:
'a'#13#10'b'
Прошу обратить внимание на то, что коды записаны вне кавычек.

Насчёт \n - никогда не слышал, чтобы в Delphi это работало. У меня Delphi 7.0 - там не работает. Хотя, возможно, я отстал от жизни wink.gif В последних версиях Delphi передирают из C++ всё подряд, возможно, что и это тоже появилось.

Это сообщение отредактировал maxdiversexnarod1 - 08-06-2007 - 14:08
kiskus
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
и снова проблема:
в одном из модулей нужно посчитать кол-во записей в таблице
перевожу таблицу на первую запись
пишу цикл от 1 до рекордкаунт
в нем инкриментирую переменную
но почему то именно с этой таблицей глюк, пишет, что кол-во записей 1 (даже вывел рекордкаунт на экран, пишет 1), хотя в реале 4
че за дела?????
kiskus
количество записей в таблице это и есть 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
про то, что рекорд каунт это кол-во записей я знаю :)
у меня переменная инкрементируется только по условию...забыл сказать :)
madfallos
У меня снова проблема: при создании дистрибутива программой 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
вопросик такой: что за файл .TV в папке с базами данных и с чем его едят????
kiskus

Вот программа создания инсталляционных пакетов - Wise Installation System,
BDE и алиасы можно установить в выходной файл. Работает без проблем.

BDE Admin -приложение для конфигурации драйвера BDE. Если BDE уже стоит,то и устанавливать не нужно.

.TV - временный файл создаваемый DBD32. Не заморачивайся.
do-do
Попросили покопаться в самопальной базе данных. Написана неизвестно на чем. Расширение файлов VAD (вроде так по телефону услыхал)
Может кто знает, чье это расширение - иль нечто самобытное ?
Возможно, базы могут содержать звуковые фрагменты.....но это вопрос

Это сообщение отредактировал do-do - 25-06-2007 - 19:49
alexfarm
Пример программы для работы с базой данных из книги Бобровского С. на странице 340 действительно не работает. Выдается ошибка при приведении к типу тблобфиелд. Решение такое: Я добавил на форму 5 таблицу и запустил программу. И всё заработало. Потом эту таблицу удалил. Всё по прежнему работает. Видимо с добавлением таблицы автоматически к модулю 5 подключились дополнительные модули, которые уже позволили работать с блоб-полями.

Страницы: [1]

Архив компьютерного форума -> Помогите разобраться с БД





Проститутки Киева | индивидуалки Москвы | Эротический массаж в Москве | Проститутки-индивидуалки Москва