Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
1-101232
DDDeN
2002-10-21 18:14
2002.10.31
Коммерческие проги


1-101280
Wiznik
2002-10-22 16:12
2002.10.31
Помогите, малость туплю:))


14-101470
Anatoly Podgoretsky
2002-10-11 10:09
2002.10.31
Именинники 11 октября


1-101267
Yasha
2002-10-22 13:25
2002.10.31
CD-ROM


3-101160
Дмитрий 2002
2002-10-10 11:24
2002.10.31
Ошибка загрузки midas.dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский