Вопрос № 105490: Добрый день, ВСЕМ!
У меня возникла проблема с отображением связанных полей в таблице DBGrid. Суть такова: Есть реляционная БД. Есть в ней две таблицы - в первой список товаров на складе в 2 столбца (tovar_id, tovar), где tovar_id - связующее поле...Вопрос № 105504: Подскажите пожалуйсто
Можно ли через вариантный массив (VarArrayCreate) передать в Word таблицу целиком, вместо записи данных в каждую ячейку поочередно.
Хочется следующего аналога, только для Word:...Вопрос № 105511: Здравствуйте Эксперты. Помогите разобраться с таким вопросом:
в дельфи есть функция Random();. Как заставить её генерировать значения в интервале [-5..+5]. Спасибо. ...
Вопрос № 105.490
Добрый день, ВСЕМ!
У меня возникла проблема с отображением связанных полей в таблице DBGrid. Суть такова: Есть реляционная БД. Есть в ней две таблицы - в первой список товаров на складе в 2 столбца (tovar_id, tovar), где tovar_id - связующее поле с таблицей справочником по товарам; tovar - код товара (LongInt) , во второй таблице справочник по товарам в 2 столбца (tovar_id, name_tovar), где tovar_id - счетчик, name_tovar - название товара (String). Теперь создаем ADOTable, DataSource и таблицу DBGrid. ADOTable связываем с БД,
DataSource связываем с ADOTable, DBGrid связываем с DataSource. В ADOTable указываем таблицу со списком товаров. DBGrid показывает 2 столбца - в первом tovar_id в виде цифры, во втором tovar тоже в виде цифры. А надо, чтобы было название товара. Как это сделать? Только стандартными средствами Дельфи. Редактируя поля в таблице, таблицы БД должны меняться. Если можно, на примерчике.
Отправлен: 15.10.2007, 09:39
Вопрос задал: Alex446 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Drbear
Здравствуйте, Alex446!
Попробуйте использовать ADOQuery примерно такого вида:
select tab1.tovar_id, tab1.tovar, tab2.tovar_id, tab2.name_tovar
from tab1INNER JOIN Таблица2 ON tab2.tovar_id = tab2.tovar_id
where тра-ля-ля1
DataSource связываете с ADOQuery, в DBGrid указываете необходимые поля отображения
можно изменить строку select, оставив только необходимые поля (tab1.tovar, tab2.name_tovar)
Ответ отправил: Drbear (статус: 2-ой класс)
Ответ отправлен: 15.10.2007, 10:26 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ, Drbear, все нормально заработало. Правда, учитывая, что связывать надо сразу несколько таблиц, запрос получился достаточно сложный. Но все работает, а как правильно, то время покажет.
Отвечает: Алексей Акишин
Здравствуйте, Alex446!
Создаешь AdoTable2 и Datasourse2, связываешь их и второй таблицей (справочником) аналогично первому AdoTable1.
Проверь подключение .
Затем правой кнопкой мыши на AdoTable1 выбираешь Fields Editor. В появившемся окне правой кнопкой выбираешь New Field:
- name - имя поля;
- type - тип поля (ставишь String);
- field type выбираешь Lookup.
Lookup definition:
- key Field - tovar;
- dataset - таблица со справочником (AdoTable2);
- lookup keys - tovar_id;
- result field - name_tovar.
После этого жмешь ОК. Должно появиться новое поле, в котором будет отображаться name_tovar при условии tovar=tovar_Id.
Если возникнут вопросы или найдешь ошибки пиши в минифорум.
--------- Что бы ни делать - лишь бы ничего не делать!
Ответ отправил: Алексей Акишин (статус: 3-ий класс)
Ответ отправлен: 15.10.2007, 10:38 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ, Алексей Акишин, тоже получилось все нормально. Не пришлось мучиться со сложными запросами, так как связывать в реале приходится сразу множество таблиц, и запросы при этом получаются сложные. Единственное НО! После создания дополнительного поля в AdoTable, перестают добавляться и удаляться строки в таблицах, этому мешают дополнительные добавленные
поля. Если отобразить такие поля в DBGrid, то они становятся редактируемыми даже когда таблица DBGrid разрешена только на просмотр. А это не есть хорошо....
Вопрос № 105.504
Подскажите пожалуйсто
Можно ли через вариантный массив (VarArrayCreate) передать в Word таблицу целиком, вместо записи данных в каждую ячейку поочередно.
Хочется следующего аналога, только для Word:
кстати Paragtaph можно вставить сразу в массив.
если есть ошибки, извините, сейчас негде проверить.
Ответ отправил: Drbear (статус: 2-ой класс)
Ответ отправлен: 15.10.2007, 11:26 Оценка за ответ: 5 Комментарий оценки: Спасибо выглядит как оптимальный вариант для Word хотя конечно с Exel по скорости не сравнится
Вопрос № 105.511
Здравствуйте Эксперты. Помогите разобраться с таким вопросом:
в дельфи есть функция Random();. Как заставить её генерировать значения в интервале [-5..+5]. Спасибо.
Отправлен: 15.10.2007, 12:16
Вопрос задал: MIXAIL (статус: Посетитель)
Всего ответов: 7 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Gh0stik
Здравствуйте, MIXAIL!
Вам достаточно пойти таким путем: var i,k:integer; begin ... randomize; k:=random(11)-5; writeln(k); ... end;
Таким подходом (random(11)-5) вы получите нужный результат. Еслинемного доработать код, то можно выводить числа из отрезка [-n; +n].
Вот код: const n=7; var k:integer; begin ... randomize; k:=random(2*n+1)-n; writeln(k); ... end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 15.10.2007, 12:30 Оценка за ответ: 5 Комментарий оценки: Спасибо. Всё оказалось очень просто!!!
Отвечает: Delph
Здравствуйте, MIXAIL!
(10 * Random - 5) - даст вещесвенный результат в диапазоне [-5..+5]. С помощью функций Trunc (отсечение дробной части) и Round (округление до ближайшего целого) результат можно привести у целому типу.
После запуска программы нужно хотя бы раз запустить процедуру Randomize, иначе значения Random будут повторяться.
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: Студент)
Ответ отправлен: 15.10.2007, 12:30 Оценка за ответ: 5 Комментарий оценки: Тоже вариант. Правда посложней.
Отвечает: Omickron !!! Здравствуйте, MIXAIL!
Достаточно просто: x:=Random(11)-5; Только предварительно нужно вызвать инициализацию генератора случайных чисел - Randomize;
Ответ отправил: Omickron (статус: 5-ый класс)
Ответ отправлен: 15.10.2007, 14:12 Оценка за ответ: 5 Комментарий оценки: Спасибо. Разобрался!!!
Отвечает: Виктор Пырлик
Здравствуйте, MIXAIL!
Вот процедурка, которая это делает.
переменным a и b присваеваем граничные значения [a,b]
а переменной f случайное число из этого диапазона
procedure TForm1.Button1Click(Sender: TObject);
var a,b,f:integer;
begin
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
Randomize;
f := RandomRange(a,b);
Label1.Caption := IntToStr(f);
end;
--------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Практикант)
Ответ отправлен: 15.10.2007, 16:11 Оценка за ответ: 5 Комментарий оценки: Интересно!!! Попробую!!!
Ответ отправил: PM_pilot (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 19:45 Оценка за ответ: 5 Комментарий оценки: Спасибо. Разобрался!!!
Отвечает: Владик !!! Здравствуйте, MIXAIL! Random(-1;1)*Random()*5 Random(-1;1) - случайное число из двух чисел
Ответ отправил: Владик (статус: 1-ый класс)
Ответ отправлен: 16.10.2007, 07:56 Оценка за ответ: 5 Комментарий оценки: Спасибо.
Отвечает: Genia007
Здравствуйте, MIXAIL! Насколько я знаю, функция Random генерирует только положительные числа, при этом если после функции нет числа, то генерируются числа от 0 до 1, а при наличие Random(x), числа от 0 до Х-1. По вашему вопросу непонятно какие числа Вам нужны (только целые или вместе с вещественными), поэтому предлагаю свой код, который генерирует целые и вещественные числа в интервале [-5,5]. Код нормально работает, если нужно только целые числа, его не трудно упростить.
Приложение:
Ответ отправил: Genia007 (статус: 1-ый класс)
Ответ отправлен: 16.10.2007, 10:08 Оценка за ответ: 5 Комментарий оценки: Спасибо. Разобрался.