Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

TStringList в таблицу   Найти похожие ветки 

 
ПИТОН   (2002-10-09 14:45) [0]

Есть данные в TStringList (порядка 3500).
Подскажите плииз, как можно быстро эти данные запхать в таблицу.
В таблице только 1 поле.
(БД - Access 2000, MS Jet 4.0)


 
{bas}   (2002-10-09 16:28) [1]

Н знаю, как остальные, а я бы делал через BLOB поле
P.S. работаю с Oracle, но думаю что и с Access прокатит


 
sniknik ©   (2002-10-09 17:45) [2]

посчитай скоко это будет в байтах.
тип memo(Text) в Access принимает (по разным источникам в одном и том же хелпе ;o)
1
Memo data type
A field data type. Such fields can contain up to 1.2 GB of text data.
2
TEXT 2 байта на знак (см. «Примечания») От 0 до 2,14 Гбайт.
склонен верить первому по второму сомнительно (весь mdb максимум 2g)

лутше всетаки текстом. можеш запихать все одной коммандой как textdelimeted. и поиск потом всетаки будет возможен. (не знаю как с блоб)

у блоба кстати размеры те же по одному месту в хелпе одни по др. см. выше.


 
ПИТОН   (2002-10-10 09:36) [3]

Да мне желательно что-бы каждая строка из ТСтрингЛиста была отдельной записью.
Тут пробовал сохранять ТСтрингЛист в текст, а потом в Аксессе делать ссылку на него, но не хочу быть привязанным к постоянному пути+имя файла, а как сделать, чтобы изменить путь к ссылке в самомо аксессе или сздать базу типа
SELECT ... INTO ... FROM File.txt не знаю.
Может кто поможет?


 
Anatoly Podgoretsky ©   (2002-10-10 09:42) [4]

В цикле, построчно


 
ПИТОН   (2002-10-10 10:26) [5]


> Anatoly Podgoretsky © (10.10.02 09:42)
> В цикле, построчно

1.5 минуты


 
sniknik ©   (2002-10-10 10:32) [6]

как ты однако повернул, с одного поля на каждую запись.

сделать то можно и из файла и путь ему любой задавать, но это будет извращение (в смысле отказ от операций в памяти в пользу дисковых, считаю извратом). если только как академический интерес то могу помоч.

а лутше
В цикле, построчно см. ^up. Anatoly Podgoretsky © (10.10.02 09:42)

код как ложиш приведи.


 
ПИТОН   (2002-10-10 10:38) [7]

For i := 0 To Lst.Count-1 Do
Table.Appendrecord(Lst[i]);


Или

For i := 0 To Lst.Count-1 Do
begin
Query.SQL.Add(Format("INSERT INTO table (Field1) Values (%s)",[Lst[i]]);
Query.ExecSQL
end;


 
Max Zyuzin ©   (2002-10-10 10:42) [8]

Можно попробовать все загнать во временную таблицу в памяти, а потом одним запром запихать в базу. (но это ИМХО левой ногой через правое плечо...)


 
ПИТОН   (2002-10-10 10:54) [9]


> sniknik © (10.10.02 10:32)
> как ты однако повернул, с одного поля на каждую запись.

Поле действительно 1. А записей 3500


 
sniknik ©   (2002-10-10 10:56) [10]

вот эта хрень ложится в таблицу за 36сек. 1300 записей 5 стринговых полей и 5 мемо. переделай под себя. с одниим полем всяко быстрей будет.

procedure TForm1.Button3Click(Sender: TObject);
const InsRepeat = 1300;
var i, n: integer;
begin
if not ADODataSet1.Active then begin
ADOConnection1.Connected:= False;
ADOConnection1.ConnectionString:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyBase.Mdb;Persist Security Info=False";
ADODataSet1.Close;
ADODataSet1.CommandText:= "MyTable";
ADODataSet1.Open;
end;
ADODataSet1.DisableControls;
for n:= 1 to InsRepeat do begin
ADODataSet1.Append;
for i:= 1 to 5 do
ADODataSet1.Fields[i].AsString:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyBase.Mdb;Persist Security Info=False";
for i:= 6 to 10 do
ADODataSet1.Fields[i].AsString:=
"


 
ПИТОН   (2002-10-10 10:59) [11]


> sniknik ©
спасибо.
Только коидировка глючит



 
sniknik ©   (2002-10-10 11:05) [12]

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


 
Serezhka   (2002-10-10 11:22) [13]


> sniknik ©
> сделать то можно и из файла и путь ему любой задавать, но
> это будет извращение (в смысле отказ от операций в памяти
> в пользу дисковых, считаю извратом). если только как академический
> интерес то могу помоч.

Помоги мне плизззззззззз, просто интересно как?



 
ЮЮ ©   (2002-10-10 11:23) [14]

1300 за 36сек не быстрее чем 3500 за 1.5 минуты :-)
И чем тебе 1.5 минуты не нравятся? Или ты каждый раз при открытии программы этим занимаешься? :-)


 
sniknik ©   (2002-10-10 11:37) [15]

Serezhka (10.10.02 11:22)
при условии что подключены через jet (можно в принципе и кривым путем ODBC, BDE но в конце все одно должен быть jet, это его фенечка)
в общеи подключение по строке
ADOConnection1.ConnectionString:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyBase.Mdb;Persist Security Info=False";

тогда запрос типа
SELECT * INTO CLIENTS FROM [Text;DATABASE=D:\].[CLIENTS#TXT]
выполненный через ADOCommand например сделает и положит в таблицу данные из CLIENTS.TXT
INSERT INTO соответственно добивит и.тд.
текстовый файл должен быть в формате CSV (как Эксель выгружает) типа
"ИндексКлиента";"CLSTNM"
1;"Черт знает что!"
первая строка поля остальное данные, лутше посмотреть выгрузку Экселя, там и мемо поля возможны!


 
sniknik ©   (2002-10-10 11:50) [16]

2 ЮЮ © (10.10.02 11:23)
наверно ты прав 3500 с одним полем 1мин 5сек. можно списать на разницу в машинах.


 
still ©   (2002-10-10 11:53) [17]


> sniknik © (10.10.02 11:05)
> при копировании ид дельфей всегда так а через блокнот или
> др. в лом. но там просто пост из форума, взял для примера
> данные для мемо поля. возьми другие.


ПОЛЕЗНЫЙ СОВЕТ:
чтобы такого не было, нужно перед операцией копирования в делфях перейти на русский язык. т.е. переключить раскладку, а затем уж Ctrl+Ins (Ctrl+C - кому как нравится)


 
sniknik ©   (2002-10-10 12:08) [18]

спасибо. действительно работает, действительно полезный совет.


 
ПИТОН   (2002-10-10 12:10) [19]

Кстати, через (ж..) текстовый файл таже операция занимает около 1 секунды. Во как!


 
ЮЮ ©   (2002-10-10 12:19) [20]

через (ж..) или Jet ? :-)
А затащить из файла в память и затем пытаться писать построчно, даже не в одной транзакции, это нормально, это не через ж...



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
1-101345
Orions
2002-10-20 23:36
2002.10.31
Работа с каталогами


3-101099
soni
2002-10-09 15:27
2002.10.31
Уважаемые! IBDataSet - как он работает?


3-101057
KidMan
2002-10-10 22:20
2002.10.31
SQL параметры и дата


4-101595
Diamond Cat
2002-09-17 01:33
2002.10.31
Регионы


1-101341
al_
2002-10-20 14:41
2002.10.31
Пропала верхняя панель в Delphi