![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать фай *.txt и записать в него данные.
vegarulez © (2006-06-04 22:00:00)Доброго времени суток мастера! У меня такой вопрос. Как создать и записать данные в текстовый файл. То бишь есть к пример Tedit в котором есть данные, или допустим Tmemo...
Так вот надо к примеру создать файл и записать в него данные...
Я делаю скорее всего неправильно, и меня выскаивает ошибка в строке помеченной $$$ (Project Project2.exe raised exception class ElnOutError with message 'I/O error 103' Process stopped Use Step or Run to continue)...
Но что-то нигде не могу найти примеров создания файлов и работы с ними... поможите ссылью... или малеким примерчиком с записью hello world в файлик 1.txt
Вот как я делаю... замудрёно и не понятно... по книженции...
unit Unit1;
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls;
const
filename:string[5]='1.dat';
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure ClearEdits;
private
{ Private declarations }
public
{ Public declarations }
end;
Trecord=record
Vata:string[20];
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
type
Txt = file of Trecord;
var
RecFile: Txt;
procedure Tform1.ClearEdits;
var
i:integer;
begin
for i:=0 to controlcount-1 do
if controls[i] is tedit then
(controls[i] as Tedit).text:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
var rec: Trecord;
tmp:Integer;
begin
rec.Vata:=Edit2.text;
$$$ tmp:=FilePos(recFile); $$$
seek(RecFile, FileSize(recFile));
write(RecFile,Rec);
seek(RecFile,tmp);
ClearEdits;
end;
end.
Сергей М. (2006-06-07 10:52:00) [1]
> загрузить с него тоже не может так как его нет
Так создай !
На то тебе и даны методы SaveToFile(), SaveToStream()
vegarulez (2006-06-06 22:28:00) [2]Ругается также при самом запросе, что Cursor not returned from Query... так запрос скорее всего однонаправленный... ничего не возвращающий...
vegarulez (2006-06-06 22:19:00) [3]Раннее спасибо написал, за то что относилось к SQLQuery + SqlConnection понял что почём.
Теперь про использование SQLClientDataSet1...
Ругается, что де не могу загрузить с файла... так как файл он походу не создаёт т.к. его нет в директории с проектом..
естественно загрузить с него тоже не может так как его нет...
Ivolg (2006-06-06 22:18:00) [4]>vegarulez ©
Пожайлуста...
vegarulez (2006-06-06 22:16:00) [5]Млин... наконец-то понял... вот я тупень...
просто когда запускал в делфи и не копилял в ехе он всегда выводил exception сообщение... и я его пытался выловить и убить чтоб оно не появлялось...
И никак не понимал, как это люди говорят, что работает и нет месаг всяких, а у меня работает и при исключении вываливается всегда месага...
блин... Оказывается просто в exe компильнуть нуно было...
спасибо Ivolg ©.. вразумил...
Тяжело в лечении, легко в раю... (с)
Ivolg (2006-06-06 22:09:00) [6]>vegarulez ©
Ругается где ? При самом запросе или при подключении ?
vegarulez (2006-06-06 22:00:00) [7]Пытаюсь так сделать - ругается... (
Как правильно прописать?
Помоги...
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.SQLClientDataSet1.CommandText:='INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ('+ Form1.edit1.text + Form1.Edit2.Text +', '+ Form2.edit1.text +', "'+ (prd) +'","'+ (strd) +'","'+ (hash) +'")';
Form2.SQLClientDataSet1.SaveToFile('123.bin',dfBinary);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form2.SQLClientDataSet1.LoadFromFile('123.bin');
Form2.SQLClientDataSet1.Active:=true;
end;
Ivolg (2006-06-06 22:00:00) [8]Извеняюсь за флуд, у меня что-то лагнуло...
Ivolg (2006-06-06 21:58:00) [9]>vegarulez ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
А кто тебе мешает удалить функцию, которая выводит сообщение ?
ShowMessage('Ошибка подключения к БД');(
Ivolg (2006-06-06 21:58:00) [10]>vegarulez ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
А кто тебе мешает удалить функцию, которая выводит сообщение ?
ShowMessage('Ошибка подключения к БД');(
Сергей М. (2006-06-06 15:17:00) [11]
> Дай
Они у тебя перед носом - в демо-проектах в штатной поставке Делфи.
vegarulez (2006-06-06 11:29:00) [12]2 Ivolg ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
2 Сергей М. ©
Тока начал читать...
У тебя есть какие-нить примеры к этому компоненту?
Дай ссыль...
Ivolg (2006-06-06 10:53:00) [13]Попробуй таким методом:
try
datamodule8.SQLConnection1.Open;
datamodule8.SQLnum.SQL.Clear;
datamodule8.SQLnum.SQL.Add('INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ('+ Form1.edit1.text + Form1.Edit2.Text +', '+ Form2.edit1.text +', "'+ (prd) +'","'+ (strd) +'","'+ (hash) +'")');
datamodule8.SQLQuery.ExecSQL();
except
ShowMessage('Ошибка подключения к БД');
Memo1.Lines.SaveToFile('db.txt');
end;
Сергей М. (2006-06-06 09:42:00) [14]
> vegarulez © (06.06.06 09:28) [23]
Ты бы хоть справку почитал что ли .. к этому компоненту ... прежде чем про "серпы" рассуждать ..
Этот компонент сделает всечто тебе нужно !
vegarulez (2006-06-06 09:28:00) [15]>Подключение ему нужно лишь в момент синхронизации
Так в этот момент и выскочит месага, что связи нет... В момент синхронизации... мне нужно это отловить.
И при выводе что нет связи сохранит в файл, потом при повторном подключении и отправке следующего запроса, открыть файл и отправить ранее не отправленные данные.
Это одно, а второе мне не надо их хранить, и запршивать всю таблицу и хранить в нём, и изменять её, и синхронизировать изменения...
мне надо просто добавить в таблицу быстро и молниеносно (как серпом по ... МТСу) )))
Без всяких синхронизаций. Однонаправленым запросом.
Сергей М. (2006-06-06 09:19:00) [16]
> TClientDataSet тоже нуждается в подключении.
Вот как раз и не нуждается.
Подключение ему нужно лишь в момент синхронизации изменений в его автономном дейтасете с соотв данными в БД. Автономный же дейтасет м.б. создан методами CreateDataSet (новый), LoadFromFile (ранее сохраненный), по окончанию сессии автономной работы приложения (т.е. сессии без подключения к БД) дейтасет м.б. сохранен в файл для последующей загрузки из этого файла.
vegarulez (2006-06-06 09:05:00) [17]Так TClientDataSet тоже нуждается в подключении....
А при подключении может выпасть ошибка...
Я использую
SQLConnection + SQLQuery
И делаю вот как
datamodule8.SQLConnection1.Open; // Открываю соединение
datamodule8.SQLnum.SQL.Clear; // Очищаю буфер запроса
datamodule8.SQLnum.SQL.Add('INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ('+ Form1.edit1.text + Form1.Edit2.Text +', '+ Form2.edit1.text +', "'+ (prd) +'","'+ (strd) +'","'+ (hash) +'")'); // Формирую запрос
datamodule8.SQLQuery.ExecSQL(); // Выполняю запрос
но когда открываешь Open, то при выключенной бд или отсутствующей связи обязательно выскочет исключение.
Сергей М. (2006-06-06 08:46:00) [18]
> vegarulez © (06.06.06 00:21) [19]
Для этого имеется готовое решение - TClientDataSet
vegarulez (2006-06-06 00:21:00) [19]Спасибо,
но это, всё же, не работа с исключениями...
Я хочу посмотреть как с исключениями работать, хотя бы один рабочий пример, чтоб понять, т.к. они ещё у меня используются в одном месте программы, где я скидываю данные в бд, а связь и доступ к бд не всегда есть, поэтому приходится в текстовик данные сохранять. Так вот при обращении к бд и надо будет использовать исключения, чтоб когда не было доступа, и открытия подключения к бд не произошло, по вызову события чтоб данные автоматом скидывались в текстовик, и естесственно пользователь не видел всяких не нужных и непонятных ему месаг... и ошибок...
Джо (2006-06-05 23:51:00) [20]
if FileExists(Filename) then
...
else
...