Форум: "Базы";
Текущий архив: 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