کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

خواندن (از) یا نوشتن (در) فایل تکست با آبجکت ADO STREAM یا vbscript



CreateObject : ADODB.STREAM


With AdoStream

.Charset="UTF-8"

.Type=2 'text

.Open

.WriteText "xcfg"

.SaveToFile "D:\C.txt",2

Str=.ReadText

End With

AdoStream.Close

Set AdoStream=Nothing


.LoadFromFile FileName



طریقه دیگر نوشتن یا خواندن یا اضافه کردن به فایل تکست  : 


Create Object : Scripting.FileSystemObject

Set Object to Fso Variable

With Fso

در متد باز کردن تکست عدد یکی از Mode ها در آرگومان قرار گیرد و همینطور در Create یا فایل موجود است یعنی True یا False است و پیش فرض False می باشد.

.OpenTextFile FileName,Mode(Read:1,Write:2,Append to End:8),Create(True or False )

نوشتن در فایل تکست اگر Mode هشت باشد به انتهای آن اضافه می کند.البته یونیکد فارسی پشتیبانی نمی شود

.Write "xcfgjj"

.Close

End With


این آبجکت FileSystemObject متد CreateTextFile نیز دارد برای ساخت فایل تکست.


The OpenAsTextStream method provides the same functionality as the OpenTextFile method of the FileSystemObject. In addition, the OpenAsTextStream method can be used to write to a file


متد OpenAsTextStream مثل OpenTextFile است دقیقا آرگومانهاش و نوشتاری تابع بعلاوه اینکه این متد می تواند روی هر فایلی بنویسید.( Write)


The AtEndOfStream property applies only to TextStream files that are open for reading; otherwise, an error occurs.


ویژگی AtEndOfStream فقط به فایل های TextStream قابل اعمال است که برای Reading باز می شوند در غیر اینصورت خطا اتفاق می افتد.چک می کند که در انتهای فایل Stream است یا خیر اگر باشد True را بر می گرداند.


Set ObjFile=ObjFso.OpenTextFile(FileName,1,0)

Do While ObjFile.AtEndOfStream <> True

ret=ObjFile.ReadLine

Loop

str=ObjFile.ReadAll

ObjFile.Close



فرض کنید یک فایل تکست تهیه شده در آن سطرهایی درج شده و هر سطر شامل چندین فیلد است با جداکننده مثل سمی کالن  ( برای تکست در فایل تکست دو کوتیشن قرار داده شده که با دستور insert into به راحتی به جدول اضافه شوند و خطا نگیرید) ، سطرها می شود همان رکوردشما هر سطرهم با Enter از هم جدا شده اند حال می خواهید فایل تکست خوانده شود و اطلاعات هر سطر را به جدول اضافه کند. لذا با دو متد بالا می توانید فایل تکست را باز کنید با تابع Split اول سطرها جدا شوند ( جدا شونده می شود vbrclf )  بعد  با همین تابع Split یا هر تابعی که نوشتید آیتم های هر سطر  که آنهم با سمی کالن جدا شده اند را بگیرید .  شماره فیلدها در جدول از صفر شروع می شود و به تعداد کل منهای یک ختم می شود . اگر قراره که تکراری نگیره خوب ID رو پرایمری کی کنید در جدول تا قبول نکنه .


Text File :

1200,'Mike','London'

1201,'Jefer','London'


Table : 

ID,SurName,City




Preserve copies the elements from the old array to the new array. It is possible to resize an array without losing the existing values by using the Preserve keyword. When you use Preserve you can only change the size of the upper bound (not the lower bound).


Preserve  عناصر را از آرایه قدیمی به جدید کپی می کند.این امکان را بوجود می آورد تا هر آرایه ای را بدون از دست دادن مقادیر موجود با استفاده از لغت Preserve دوباره اندازه بدید.زمان استفاده از این کلمه کلیدی فقط سایز محدوده بالایی تغییر می کند یعنی پائینی صفر می ماند یا عدد تعریف شده برای شروع و عدد حد بالایی اضافه می شود.


تصویر زیر نمونه ای از یک جداکننده است ، البته نام تابع باید Separator باشد ولی تابع Split همین عمل را انجام میدهد احتیاج به نوشتن چنین تابعی نیست.




برای اضافه کردن تکست ، حتما  باید بین دو کوتیشن باشد وگرنه اکسس خطا می دهد. با اجرای کوئری اپند زیر با توجه باینکه فایل تکست منطبق بر تعداد فیلد در جدول است به راحتی به جدول اضافه می شوند و اگر ID که پرایمری کردید تکراری بود به جدول اضافه نمی شود. ( فیلد های MultiValued و یا Attachment را نمی توان در کوئری Append و Make Table استفاده کرد منجر به خطا می شود.) 


StrSQL="Insert Into TableName (ID,SurName,City) Values (" & Str & ")"



میشود که تابع تصویر را گسترش داد که بغیر از آرگومان های گرفتن رشته و جداکننده که اجباریست ، تعداد کل آرایه و مقدار هر کدوم بصورت انتخابی اضافه شوند مثلا


Function Separator(S As String,Delim As String,Optional GetTotalNumber As Boolean,Optional  Num As Long) 


یا کلاس ماژولی نوشت که GetString ویژگیهایی مثل Counter و ... باشد که در همه جا بتوانید استفاده کنید البته یادآوری می کنم تابع Split در اکسس و جداسازی وجود دارد.









Set ColItms=Objwinmgmts.ExecQuery ( _

"Select * From Win32_OperatingSystem")

ObjItms In ColItms



SerialNumber




نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد