Вопрос № 67979: Здравствуйте, уважаемые эксперты. Вопрос по преобразованию данных.
Имеется переменная типа string, содержащая шестнадцатиричное представление числа, напр. '4F2A31'. Требуется найти число в десятичной системе счисления. У меня код получается не то...Вопрос № 68040: доброго времени суток уважаемые эксперты
всю ночь мучался над одной проблемкой
в базе данных есть колонка дата (дд.мм.гггг)
как осуществить поиск по дате если пользователь будет вводить
только (дд.мм)
год в данном случае неимеее...Вопрос № 68044: доброго времени суток уважаемые эксперты
у меня простенький вопрос но я в справочнике ненашел ответа
если программа имеет 3-4 формы
сначала загружается 2-я форма, 2-я уничножается открвается 1-я
пользователь работает именно с 1 формо...Вопрос № 68051: доброго времени суток уважаемые эксперты
у меня такая проблема
как создать DLL , как её подключить к пограмме и потом отключить если она ненужна
все что я нашел в интернете это просто код
но ведь переписывая чейто код и непонимая чт...Вопрос № 68113: Как можно возводить число в любую степень и извлекать корень любой степени при помощи длинной арифметики?...Вопрос № 68120: Здравствуйте, уважаемые эксперты. Снова вопрос по преобразованию данных. Слаб я в этом деле :) Итак:
Имеется переменная TDateTime, в коей хранится Дата и Время события.
Требуется записать в базу данных Access (использую ADO) в отдельное поле ...
Вопрос № 67.979
Здравствуйте, уважаемые эксперты. Вопрос по преобразованию данных.
Имеется переменная типа string, содержащая шестнадцатиричное представление числа, напр. '4F2A31'. Требуется найти число в десятичной системе счисления. У меня код получается не то что большой, а очень уж некрасивый. С функцией HexToBin так и не разобрался. Если можно использовать ее, то приведите пожалуйста пример ее использования.
PS. Строка может быть длиной до 20 символов (10 шестнадцатиричных чисел). Заранее спасибо.
Отвечает: PaVeL_Ekt
Здравствуйте, Щапель Алексей Михайлович!
вот, самое простое и менее затратное:
var m: integer;
...
m:=strtoint('$4f2a31'); //символ $ указывает что в строке hex код, без него еррор вылазит типа валуе нот интегер.
showmessage(inttostr(m));
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 21.12.2006, 12:25 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо, во-первых за оперативность, а, во-вторых, за оригинальную идею. Я бы не додумался до такого элементарного способа.
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Шапель Алексей Михайлович!
Привели бы ваш пример кода... непонятно, как и у вас требования.
Мой вариант в приложении.
Действительно, можно использовать символ '$' и применять StrToInt64
Приложение:
--------- Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 21.12.2006, 12:58 Оценка за ответ: 5 Комментарий оценки: Способ очень хорош для больших чисел. Огромное спасибо.
Отвечает: Gh0stik
Здравствуйте, Шапель Алексей Михайлович!
Вот предлагаю Вам на суд еще такой способ....
program Hex2Dec;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i:integer;
rez:int64;
c16:string;
begin
write('HEX=',c16);read(c16);
rez:=0;
for i:=length(c16) downto 1 do
case ord(c16[i]) of
48..57: rez:=rez+round((ord(c16[i])-48)*exp((length(c16)-i)*ln(16)));
65..70: rez:=rez+round((ord(c16[i])-55)*exp((length(c16)-i)*ln(16)));
end;
write('BIN=',rez);
readln;
readln;
end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Практикант)
Ответ отправлен: 21.12.2006, 13:27
Вопрос № 68.040
доброго времени суток уважаемые эксперты
всю ночь мучался над одной проблемкой
в базе данных есть колонка дата (дд.мм.гггг)
как осуществить поиск по дате если пользователь будет вводить
только (дд.мм)
год в данном случае неимееет особого значения
главное чтобы из базы вытащили все что совпадает по (дд.мм)
обьясните пожалуста по подробней
что почему и как
заранее спасибо за ответ
Отправлен: 21.12.2006, 19:16
Вопрос задал: Fins (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Крылов Александр Владимирович
Здравствуйте, Fins!
Вам следовало указать СУБД, с которой Вы работаете, т.к. язык SQL различен для каждой СУБД, а также его возможности манипуляции данными
Возможно, мой вариант не самый оптимальный, но...
Идея такова, что дата из базы преобразовывается в строку и дальше уже сравнивать строки
Для преобразования в разных СУБД существую различные функции
CAST (<поле> AS <тип>),
TO_CHAR(<поле>, <формат>),
Форматы для функции TO_CHAR
'DD-Mon-YY'
'DD-Mon-YYYY'
'MM/DD/YY'
'MM/DD/YYYY
'DD.MM.YY'
'DD.MM.YYYY'
Пример
SELECT count(*) FROM db WHERE CAST(Birthdate AS char(10)) LIKE '26.12%'
или
SELECT count(*) FROM db WHERE TO_CHAR(Birthdate, 'DD.MM.YY') LIKE '26.12%'
Select * from base
where
Date like ('10.12%')
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 22.12.2006, 08:14
Отвечает: Alex Van Glukhman
Здравствуйте, Fins!
Query1.Active:=false;
Query1.SQL.Text:='SELECT * FROM BD WHERE DATE LIKE :DATE';
Query1.Params.DataType:=ftString;
Query1.Params.Value:=Edit1.Text+'%'; //идёт по любому формату что ввели то и фильтруем
Query1.Active:=true;
Ответ отправил: Alex Van Glukhman (статус: 2-ой класс)
Ответ отправлен: 22.12.2006, 21:02
Вопрос № 68.044
доброго времени суток уважаемые эксперты
у меня простенький вопрос но я в справочнике ненашел ответа
если программа имеет 3-4 формы
сначала загружается 2-я форма, 2-я уничножается открвается 1-я
пользователь работает именно с 1 формой
3 и 4 форму не факт что вызовет
через меню project>options можно формы вытащить чтобы они незагружались все сразу
но при этом программа уже незапускается
что именно нужно прописать в project.dpr
чтобы это все работало и програма не грузила оперативную память
спасибо за ответ зарание
Отправлен: 21.12.2006, 19:35
Вопрос задал: Fins (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Крылов Александр Владимирович
Здравствуйте, Fins!
Вот пример, того как я это делал
После того как добавляется новая форма, эта форма создаётся при загрузке приложения
(в .dpr-файл добавляется Application.CreateForm(<класс формы>, <имя>) )
Процедуры создания всех форм кроме первой следует закомментировать, и прописать их в
обработчиках событий, которые вызывают соответствующие формы.
Пример.
Нажимаем на главной форме на кнопку, которая должна открыть другую форму FormEditStudent:
procedure TMainForm.Button1Click(Sender: TObject);
begin
Application.CreateForm(TFormEditStudent, FormEditStudent); // создаём форму
Self.Hide; // прячем главную
FormEditStudent.Show; // показываем форму
end;
Теперь нам нужно вернуться на главную форму из формы FormEditStudent:
procedure TFormEditStudent.BtnBackClick(Sender: TObject);
begin
Self.Hide; // прячем форму FormEditStudent
MainForm.Show; // Показываем главную форму
Self.Release; // уничтожаем FormEditStudent
end;
Прежде всего,после создания всех 4 форм,вам необходимо установить,какие формы будут создаваться автоматически,а какие будут доступными.В частности,в вашей задаче автоматически будет создаваться вторая форма,все остальные должны быть доступны.Для этого зайдите в опции проекта и перенесите Form1,Form3,Form4 в окно для доступных форм.После этого вам необходимо сделать соответствующие ссылки на модули форм.Для этого необходимо прописать ссылку в разделе uses.
Для первой формы:
var
Form1: TForm1;
implementation
uses Unit3, Unit4, Unit2;
{$R *.dfm}
Для второй формы:
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
А далее пишем код для взаимодействия с процедурами форм.
Для первой формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2.Free;//удаляем из памяти
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm3,Form3); //создаём форму
Form3.Show; //делаем форму видимой
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm4,Form4); //создаём форму
Form4.Show; //делаем форму видимой
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.CreateForm(TForm2,Form2); //создаём форму
Form2.Show; //делаем форму видимой
end;
end.
Для второй формы:
procedure TForm2.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm1,Form1); //создаём форму
Form1.Show; /делаем форму видимой
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Form1.Free; //удаляем из памяти
end;
end.
А вот,чтобуде после этого прописано в Project1:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
После этого будет всё работать,как вы хотели.
Удачи!
Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 22.12.2006, 01:08
Отвечает: PaVeL_Ekt
Здравствуйте, Fins!
К ответам добавлю, что создавать формы возможно и таким методом
form2:=TForm2.Create(application);
form2.Show;
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 22.12.2006, 07:58
Вопрос № 68.051
доброго времени суток уважаемые эксперты
у меня такая проблема
как создать DLL , как её подключить к пограмме и потом отключить если она ненужна
все что я нашел в интернете это просто код
но ведь переписывая чейто код и непонимая что ты пишешь и для чего невозможно ничему научится
если вам нетрудно
напишите чтонибудь похожее или
укжите ссылочку на код с подробным обьяснением
заранее спасибо за ответ
прозьба неудивляйтесь моему вопросу я учусь сам и покачто еще новичек в таких делах
Отправлен: 21.12.2006, 20:13
Вопрос задал: Fins (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: monah
Здравствуйте, Fins!
В приложении пример, рабочий, но немного урезаный. По подключению к DLL
Сама же DLL создается с просто. В Delphi меню File/New/Other выбираете пункт DLL Wizard. Сохраняете проект. Обявляете там нужные функции. Обявить же функции экспортируемыми (доступными) можно перечислив их через запятую после ключевого слова exports перед структурой begin / end. в конце файла без параметров. примерно так
exports start, execut;
Приложение:
--------- festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 21.12.2006, 20:44
Отвечает: Mo-skin
Здравствуйте, Fins!
Вот пример простейшей DLL.
В ней всего одна функция, она складывает два числа.
В делфийском хелпе поищите LoadLibrary.
Там есть хороший пример.
--------- Чем больше женщину мы меньше, тем больше меньше мы ее!
Ответ отправил: Mo-skin (статус: 3-ий класс)
Ответ отправлен: 22.12.2006, 00:15
Отвечает: PaVeL_Ekt
Здравствуйте, Fins!
К ответам хочу добавить, что длл это такой-же проект, только создается не EXE, а DLL, соответственно в длл можно запихивать формы, и делать все то, что и в обычном проекте.
Для подключения длл лучше использовать динамическую загрузку, по многим причинам:
если отсутствует ДЛЛ или произойдет какая-нибудь ошибка то программа продолжит работать, (при статическом, программа просто не запуститься)
Подключение по мере необходимости,
По динамической загрузке ответ полный и MONAH-а.
УДАЧИ
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 22.12.2006, 08:09
Вопрос № 68.113
Как можно возводить число в любую степень и извлекать корень любой степени при помощи длинной арифметики?
Для возведения числа в любую степень используется функция Power(a,b)(a возвести в степень b) или X^Y = exp(ln(X) * Y) c некоторыми условиями (например, X не может быть нулем).Для извлечения корня используется функция Sqrt(x).
Например:
procedure TForm1.Button1Click(Sender: TObject);
var a:Real;
b:Real;
s:Extended;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text);
s:=Power(a,b);
Edit3.Text:=FloatToStr(s);
end;
Только незабудьте добавить в раздел uses Math.
Удачи!
Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 22.12.2006, 15:52 Оценка за ответ: 3 Комментарий оценки: Это я знаю, мне нужна работа с длиннными числами, которые ни один из типов держать не может!
Вопрос № 68.120
Здравствуйте, уважаемые эксперты. Снова вопрос по преобразованию данных. Слаб я в этом деле :) Итак:
Имеется переменная TDateTime, в коей хранится Дата и Время события.
Требуется записать в базу данных Access (использую ADO) в отдельное поле Дату, а в отдельное поле Время. С датой все получается DateToStr --> 'dd.mm.yyyy', а вот со временем получается TimeToStr --> '30.12.1899 h:mm:ss'. Что с этим можно сделать ?
Отвечает: PaVeL_Ekt
Здравствуйте, Шапель Алексей Михайлович!
TimeToStr(Time) должно нормально работать.
Возможно в бд поле стоит не типа Time, а типа DateTime
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 22.12.2006, 11:23
Отвечает: KiberZero
Здравствуйте, Шапель Алексей Михайлович!
Ошибок не вижу, должно работать,возможно синтаксическая ошибка в коде,проверьте!
Вот пример:
procedure TForm1.Button1Click(Sender: TObject);
var c:TDateTime;
begin
c:=now;
Edit1.Text:=FloatToStr(c);
Edit2.Text:=DateTimeToStr(c); //показывает дату и время 22.12.2006 16:15:14
Edit3.Text:=TimeToStr(c); //показывает время 16:15:14
Edit4.Text:=FormatDateTime('dd.mm.yyyy tt',c); //показывает дату и время в формате
end;
Ответ отправил: KiberZero (статус: 7-ой класс)
Ответ отправлен: 22.12.2006, 16:21
Отвечает: Alex Van Glukhman
Здравствуйте, Шапель Алексей Михайлович!
Ошибка в БД в поле Время - внимательно проверьте тип поля попробуйте изменить его на строку и смотрите результат
Ответ отправил: Alex Van Glukhman (статус: 2-ой класс)
Ответ отправлен: 22.12.2006, 21:20