Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.144.69] |
|
Сообщ.
#1
,
|
|
|
Доброе время суток Ув. Коллеги!
Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу. ТХТ файл состоит из строк с несколькими типами разделителей, что то типа 1)[:]Фрукты[:]Яблоки[:]Шт[:] и т д. каждая запись через разделитель относится к разной таблице в бд. У меня соображений вообще никаких, среду Visual Studio\VB вижу 1ый раз, а ТХТ это выгрузка написанная на 1с =) Те куски кода и описания методов что я нашёл - не подходят, ошибки в синтаксисе - это меня вводит в ступор Подскажите пожалуйста как это реализовать. Заранее благодарен за любую помощ. С уважением. |
Сообщ.
#2
,
|
|
|
Весьма похожая тема (для чтения и разделения)
|
Сообщ.
#3
,
|
|
|
Цитата Black Star @ Весьма похожая тема (для чтения и разделения) Ну там далеко не полная задача, а так, тему я ту конечно же читал. В пятницу код запостить не успел, собственно вот что я родил, сильно только не пинай =( Dim FileNum As Integer Dim Txt As String Dim Test() As String Dim Counter As Integer FileNum = FreeFile() FileOpen(1, "c:\1.txt", OpenMode.Input) FileOpen(2, "c:\2.txt", OpenMode.Output) Do While Not EOF(1) Txt = LineInput(FileNum) Test = Split(Txt, "[:]") For Counter = Test.GetLowerBound(0) To Test.GetUpperBound(0) Next ListBox1.Items.Add(Txt.ToString()) Write(2, Txt) Loop FileClose(FileNum) Покритикуйте пжалста, как работает я не понимаю, но выводит или тоже самое что в тхт1 или же тоже самое но без разделителей. Test выводит тоже самое без разделителя, Txt целиком строчку из 1ого текстовика, Counter считает записи перед разделителем вроде. |
Сообщ.
#4
,
|
|
|
Вот что получилось со Splitом:
Dim FileNum As Integer Dim S As String Dim Ars() As String FileNum = FreeFile() FileOpen(1, "c:\1.txt", OpenMode.Input) FileOpen(3, "c:\Artikul.txt", OpenMode.Output) Do While Not EOF(1) S = LineInput(FileNum) Ars = S.Replace("[:]", ":").Split(":"c) For i As Integer = 0 To Ars.Length - 1 Debug.Print(Ars(i)) Next i WriteLine(3, Ars(1)) Loop FileClose(1) Вопрос такой, как написать условие на разделитель, чтобы читались строки из ТХТ с разделителем "1)" ? точнее это даже не разделитель а нумерация, выглядит вот так: 1)[:]Яблоки[:] 2)[:][:] 3)[:][:] Хотябы теоретически как это можно реализовать. Заранее спасибо. |
Сообщ.
#5
,
|
|
|
Цитата Chilly @ Вопрос такой, как написать условие на разделитель, чтобы читались строки из ТХТ с разделителем "1)" ? точнее это даже не разделитель а нумерация, выглядит вот так: Каков смысл терминов "условие на разделитель"? И что значит "читались строки из ТХТ с разделителем "1)" "? Ибо "Моя твоя не понимай". То ли надо считать строку и если она начинается с "1)" что-то с ней сделать, то ли что другое. Если первое, то If тебе в руки. З.Ы. Вопрос то по VB.NET, может перенести? |
Сообщ.
#6
,
|
|
|
Цитата Chilly @ Ars = S.Replace("[:]", ":").Split(":"c) Можно сразу юзать Split("[:]") В остальном Цитата Viper @ "Моя твоя не понимай" |
Сообщ.
#7
,
|
|
|
Цитата Black Star @ Можно сразу юзать Split("[:]") У него VB.NET, там разделитель должен из одного символа быть. По крайней мере я вариант со строкой из трех символов не обнаружил. Добавлено, хотя нет, есть вариант: Ars = Split(s, "[:]") |
Сообщ.
#8
,
|
|
|
Большое спасибо всё получилось.
С разделителем я думаю всё понятно, я даже нарисовал, просто стебёте) А условие это If Ars(0) = ("1)") Then ;) Ars = S.Replace("[:]", ":").Split(":"c) For i As Integer = 0 To Ars.Length - 1 Next i Вопрос, теперь как записи Ars(n) запихнуть в MS SQL ? |
Сообщ.
#9
,
|
|
|
M Тема перенесена из Visual Basic -> Visual Basic. Общие вопросы. |
Сообщ.
#10
,
|
|
|
Добрый день.
Пытаюсь добавить запись в MS SQL: Validate() GoodsBindingSource.EndEdit() GoodsTableAdapter.Update(_1cuploadDataSet) Точнее добавляю строчку, вижу её в датагриде, но обновить при этом таблицу не могу. Пишет ошибку неверная таблица [owner'создатель таблицы].Goods ... хотя из неё он берёт данные, отображает 1 запись которую я добавил через sql manager. Invalid object Name 'SQLSystemVariables' <---- Побившись денёк головой я наткнулся на свою проблему в инете: http://www.axapta.mazzy.ru/lib/sqlsystemvariables/ Там сказано что эта ошибка возникает при переносе базы, дай дейтвительно я её перенёс. Вот объяснение проблемы: Проблема состоит в том, что MS SQL внутри работает не с текстовым именем bmssa, а с числовым идентификатором, который привязан к этому имени. Когда вы переносите базу имя bmssa и идентификатор переносится без изменений. Но идентификатор пользователя на новом сервере другой! Поэтому MS SQL не может связать базу данных с другого сервера с пользователем на вашем сервере. С того же ресурса я взял скрипт который должен был поправить ситуацию, sp_change_users_login 'Auto_Fix', 'bmssa'. Но чуда не произошло, ничего не исправилось. Вообщем поматерившись я взял и в ручную пользователя перебил на dbo ... но для него не могу указать логин. логин пустой ... при попытки добавить логин вылезает очередная ошибка. Пробовал поправить ODB ... ошибка Msg 15287. В вижуале добавляю конект к бд, логинюсь под админом, все права стоят, транспортирую бд, создаётся датасет, пытаюсь достучаца до нужной мне таблицы, Goods ... так вот при обновлении её она показывает мне бальшой при бальшой Х с таким вот кодом ошибки INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_Goods_Measures'. The conflict occurred in database '1cupload', table 'Measures', column 'ID'. The statement has been terminated. Никакого обновления конечно же не происходит. всё это меня уже зае ... и как это решить я незнаю. склоняюсь к мысли что нужно делать новую бд и никуда её больше не переносить. Помогите пожалуйста решить эту проблему ... |
Сообщ.
#11
,
|
|
|
Цитата Chilly @ Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу. в принципе SQL сервер сам умеет грузить данные из текстовыйх файлов, и делать он это будет на порядки быстрее чем будет проводится загрузка средствами ADO.NET... |
Сообщ.
#12
,
|
|
|
Цитата farad @ Цитата Chilly @ Появилась необходимость написать программу загрузки данных из *.ТХТ файла в MS SQL базу. в принципе SQL сервер сам умеет грузить данные из текстовыйх файлов, и делать он это будет на порядки быстрее чем будет проводится загрузка средствами ADO.NET... Дело в том что там в текстовике полная каша, с импровизированным разделителем. Их даже не один тип. 1 тип разделителей делит записи, потом цыфрами со скобкой делятся строки, так просто не загрузишь её в MS SQL. Да и я не гонюсь за скоростью ... это сделано для того чтобы по скрипту эта софтинка работала сама, у неё есть 12 часов)) |
Сообщ.
#13
,
|
|
|
Chilly я не совсем понял чего-ты от меня хочешь(то что ты в личке просил), у меня нет аськи, поэтому я сюда напишу. Вот пример создания таблицы и загрузки в нее одной записи. Для твоей задачи нужно указать твою строку подключения к серверу и правильно определить типы колонок, в примере для простоты это текст... Пример на шарпе, на васике как-то похоже должно быть..
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\test.accdb")) { using(OleDbCommand comm = new OleDbCommand("create table table1 (column1 varchar(100),column2 varchar(100));",conn)) { conn.Open(); //создание таблицы comm.ExecuteNonQuery(); //формирование команды вставки строки в таблицу comm.CommandText = "insert into table1 (column1,column2)values(?,?)"; comm.Parameters.Add(new OleDbParameter("par1", OleDbType.VarChar, 100, "column1")); comm.Parameters.Add(new OleDbParameter("par2", OleDbType.VarChar, 100, "column2")); //загрузка одной строки - повторять столько раз сколько строк собираешься грузить comm.Parameters["par1"].Value = "значение в колонке 1"; comm.Parameters["par2"].Value = "значение в колонке 2"; comm.ExecuteNonQuery(); } } |
Сообщ.
#14
,
|
|
|
Цитата я не совсем понял чего-ты от меня хочешь( Как я делал: Чтобы закинуть данные в MS SQl ... создал бд в MS SQL, в вижуале законектился, добавил сорс, создался грубо говоря образ моей бд в вижуале, DataSet.Всё. теперь через тейбл адаптер я могу обращаться к таблицам и вносить изменения, они вводятся в датасет который мы потом обновляем а тот в свою очередь синхронизируется с MS SQLем. 1ый раз, до описанный выше ошибки всё работало ... потом бд заглючила, тк я её переносил, после чего я психанул и сделал всё тоже самое с нуля. Но теперь я не могу обратится к dataset'y и я не могу понять почему, пишет что датасет не определён, мне говорят - А почему он не определён ? да я его и в первом случаи не определял всё должно работать как в 1ый раз, датасет добавился и прописались все адаптеры. Сейчаз я сравнил код прошлого датасета с этим ... код одинаковый ... но один хер вижуал упорно ругается что датасет не определён ! где какой строчки нехватает .. что нужно объявить чтобы он видел этот сраный датасет. |