Closed TopicStart new topicStart Poll

Страницы: (2) 1 2 
madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Начал писать базу на 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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
[Error] MyForm.pas(73): Missing operator or semicolon
забыл поставить закрывающие точку с запятой

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

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

Это сообщение отредактировал kiskus - 06-04-2007 - 10:39
madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
пасиб за совет 0096.gif

Это сообщение отредактировал madfallos - 06-04-2007 - 12:30
madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
и снова вопрос:
как создать связь один ко многим в Paradox?
есть главная таблица с ключевым полем "табельный номер", и есть еще одна таблица (в ней тоже есть поле "табельный номер"), несколько записей которой должны соответствовать одной записи в главной таблице.
ЗЫ: ни в одной книге не написано как это сделать (прям по шагам) :(((
kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Подчиненная таблица должна быть проиндексирована по полю
по которому будет вестись связь с главной таблицей.
Далее:

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
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
и снова проблемы :)
как отфильтровать таблицу по полю, но только данные в это поле вводятся так: из комбобокса на 1 форме в переменную, затем по кнопке на другой форме из переменной в поле...ну и соответственно фильтр надо поставить на переменную...т.к. она меняться будет в последующем..но так чето не получается...
kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Фильтр в БД применяется при открытии таблиц.
Непонятно, куда ставится фильтр, или на значеня поля, или на переменную при вводе.

madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
фильтр нужно сделать по полю, данные в которое вводятся из переменной, юзер набирает в форме число, оно уходит в переменную, затем при нажатии кнопки "Сохранить запись" на другой форме эта переменная записывается в текущую запись в нужное поле главной таблицы и я вычитал, что в датамодуле в свойстве Filter нужной таблицы надо писать <имя поля>=1, а мне надо <имя поля>=peremennaya...что собственно не получается...делфя понимает что это не переменная, а слово "peremennaya", находящееся в записях поля..и естессно не находит ничего, выдает ошибки, т.к. там цифры... как быть?
kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Саммый простой способ отследить на уровне приложения то ,что вводит пользователь.
Пример:
Если через переменную и переменная цифра то

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
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
пасиб, я попробовал через SQL...параметрический запрос...и получилось :)
но все равно спасибо

madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
И снова проблема…
Имеем две формы, на одной стоит куча Edit’ов и прочей мелочи для ввода данных в базу, на второй – DBGrid, привязанный к той же базе для общего просмотра (точнее привязана к SQL-запросу), как сделать, чтобы при клике на одной из записей в таблице во второй форме выходила первая форма для ее редактирования.

kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Нужно отработать событие DbGrida - onDblClick



madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
а как попасть на нужную запись?
kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Попасть на нужную запись можно методом поиска в Бд
пример:

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
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Интересует еще один вопрос:
При попытке удалить запись из главной таблице выходит сообщение о том, что в подчиненной таблице есть связанные с ней (главной записью) записи и соответственно ничего не получается :(((, как удалить запись из главной таблицы вместе с записями подчиненной???

kiskus
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Закрыть подчиненную таблицу и удалить запись в главной
madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
проблема такая: создал параметрический запрос который выбирает диапазон дат

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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 7
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен


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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 7
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
Запрос можно оформить процедурой и передавать значения едитов
madfallos
дата: [ i ]
  • *
  • Профессионал
  • Репутация: 91
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
очередной вопрос :)
как записать несколько полей из 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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 7
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
QUOTE (madfallos @ 06.06.2007 - время: 11:20)
а нужно:
datamodule2.svodka.FieldByName('osnova').AsString:=query1Adres.AsString+' '+query1Dom.AsString+' '+query1Kvartira.AsString+'вот тут перевод'+query1Facticheski.AsString;

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

не знаю, как в дельфи, а в билдере стандартный символ перевода строки добавляется '\n', может также и в дельфях работает.
maxdiversexnarod1
дата: [ i ]
  • *
  • Любитель
  • Репутация: 30
  • Статус:
  • Member OfflineМужчинаСвободен
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
дата: [ i ]
  • *
  • Новичок
  • Репутация: 14
  • Статус: Давай пообщаемся!
  • Member OfflineМужчинаСвободен
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
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)

Страницы: (2) 1 2

Closed TopicStart new topicStart Poll0


Рекомендуем почитать также топики:

проблема с XP Professional

фишка XP

тест скорости соединения с интернет

Проблема с установкой Windows XP

Как бороться с http://lix.in



>