Programim dhe zhvillim, javascript, python, php, html

Shtoj Fushat në një grup rekord ekzistues ADO

Unë jam duke përdorur një grup regjistrimesh ADO në Excel për të rrëmbyer një CSV të madhe (~ 1 milion rreshta) dhe për ta përdorur atë si të dhëna të jashtme për të krijuar një PivotCache & Pivottable.

Unë dua të modifikoj grupin e të dhënave për të shtuar fusha (kolona) shtesë dhe të shtoj të dhëna që llogariten nga njëra prej fushave, pra një fushë javore e cila ka të dhëna vargu si kjo:

p.sh. nëse A, B, C janë fushat e grupit të të dhënave,

    A         B        C        D        E
w 2011 01                       01    2011
w 2011 02                       02    2011
w 2011 03                       03    2011
w 2011 04                       04    2011
w 2012 05                       05    2012

më pas dua të shtoj fushat D, E dhe t'u shtoj të dhëna siç tregohet më sipër, të hequra nga kolona A si do të bëja në excel,

D = VLERË (Djathtas(A2,2)) E = VLERË(MID(A2,3,4))

por unë dua të bëj duke përdorur funksionet SQL.

atëherë unë e përdor këtë grup të dhënash të bashkangjitur për të krijuar një memorie kryesore dhe një tabelë përmbledhëse duke e përdorur atë si një burim të jashtëm të dhënash. SHIH KOMENTET MIA NË KODI. Unë nuk mund ta klonoj grupin e të dhënave në një grup të ri të dhënash, gjithashtu pasi më jep disa gabime të padisponueshme të faqeshënuesve.

më poshtë më jep gabime:

Option Explicit 

Sub GetCSV() 
Application.EnableEvents = False 
Application.DisplayAlerts = False 
Application.ScreenUpdating = False 

Dim sFileName As String 
Dim sFilePath As String 
Dim rngPivotDest As Range 
Dim pcPivotCache As PivotCache 
Dim ptPivotTable As PivotTable 
Dim SQL As String 
Dim sConnStrP1 As String 
Dim sConnStrP2 As String 
Dim cConnection As Object 
Dim rsRecordset As Object, RS As Object, Fld As Object 
Dim Sht As Worksheet 
Dim Conn As Object 

With ThisWorkbook 

Set rsRecordset = CreateObject("ADODB.Recordset") 
Set RS = CreateObject("ADODB.Recordset") 
Set cConnection = CreateObject("ADODB.Connection") 


sFileName = Application.GetOpenFilename("Text Files, *.asc; *.txt; *.csv", 1, "Select a      Text File", , False) 
sFilePath = Left(sFileName, InStrRev(sFileName, "\")) 
sFileName = Replace(sFileName, sFilePath, "") 

sConnStrP1 = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" 
sConnStrP2 = ";Extensions=asc,csv,tab,txt;FIL=text;Persist Security Info=False" 

cConnection.Open sConnStrP1 & sFilePath & sConnStrP2 
SQL = "SELECT * FROM [" & sFileName & "]" 
Set rsRecordset = cConnection.Execute(SQL) 


'****** THIS ENTIRE PART IS NOT WORKING****** 
With RS 
.cursorlocation = 3 'aduseclient 
.cursortype = 2 'adOpenDynamic 3 'adopenstatic 
'    For Each Fld In rsRecordset.Fields 
'        .Fields.append Fld.Name, Fld.Type, Fld.definedsize, Fld.Attributes,     Fld.adFldIsNullable 
'    Next Fld 
.locktype = 4 'adLockBatchOptimistic'3 'adlockoptimistic 
.Fields.append "WeekNumber", 3 'adinteger 
.Fields.append "Year", 7 'addate 

.Open 
.Update 

'do something to grab the entire data into RS 
Set RS = rsRecordset.Clone 

'or something like 
Set RS = rsRecordset.getrows 

'append some function code to the last 2 fields to strip YEAR & WEEK from 1st field. 
...... 
...... 


End With 
********************************* 

'Delete any connections in workbook 
On Error Resume Next 
For Each Conn In .Connections 
    Conn.Delete 
Next Conn 
On Error GoTo 0 

'Delete the Pivot Sheet 
On Error Resume Next 
For Each Sht In .Sheets 
If LCase(Trim(Sht.Name)) = LCase("Pivot") Then Sht.Delete 
Next Sht 
On Error GoTo 0 

'Create a PivotCache 
Set pcPivotCache = .PivotCaches.Create(SourceType:=xlExternal) 
Set pcPivotCache.Recordset = rsRecordset 

'Create a Pivot Sheet 
.Sheets.Add after:=.Sheets("Main") 
ActiveSheet.Name = "Pivot" 

'Create a PivotTable 
Set ptPivotTable =  pcPivotCache.CreatePivotTable(TableDestination:=.Sheets("Pivot").Range("A3")) 

With ptPivotTable 
    .Name = "PivotTable" 
    .SaveData = False 
End With 


With ptPivotTable 
    With .PivotFields("Level") 
       .Orientation = xlPageField 
       .Position = 1 
    End With 
With .PivotFields("Cat") 
    .Orientation = xlPageField 
    .Position = 1 
End With 
With .PivotFields("Mfgr") 
    .Orientation = xlPageField 
    .Position = 1 
End With 
With .PivotFields("Brand") 
    .Orientation = xlPageField 
    .Position = 1 
End With 
With .PivotFields("Descr") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
End With 

ptPivotTable.AddDataField ptPivotTable.PivotFields("Sales Value from CrossCountrySales"), "Sum of Sales Value from CrossCountrySales", xlSum 

With ptPivotTable.PivotFields("Week") 
    .Orientation = xlColumnField 
    .Position = 1 
End With 

With ptPivotTable.PivotFields("Sum of Sales Value from CrossCountrySales") 
    .Calculation = xlNoAdditionalCalculation 
End With 

cConnection.Close 
Set rsRecordset = Nothing 
Set cConnection = Nothing 
Set Conn = Nothing 

End With 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 
Application.EnableEvents = True 

End Sub

  • A keni provuar të krijoni dhe plotësoni ato kolona shtesë në pyetjen tuaj SQL, në vend që t'i shtoni ato më pas? 23.05.2014
  • Përshëndetje Tim, nuk di si t'i shtoj ato kolona dhe të dhënat e tyre të nxjerra përmes sql. 23.05.2014

Përgjigjet:


1

Ju mund t'i krijoni ato fusha të reja në pyetjen tuaj origjinale SQL.

Ja një shembull i thjeshtuar: po kërkoj një skedar txt "week.txt" (i cili ka vetëm një kolonë me kokën "javë" dhe disa rreshta të dhënash testimi) dhe po hedh grupin e të dhënave në një fletë pune.

Sub GetCSV()

    Dim SQL As String
    Dim sConnStrP1 As String
    Dim cConnection As Object
    Dim rsRecordset As Object, RS As Object
    Dim Conn As Object, i As Integer

    Set rsRecordset = CreateObject("ADODB.Recordset")
    Set RS = CreateObject("ADODB.Recordset")
    Set cConnection = CreateObject("ADODB.Connection")

    sConnStrP1 = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                 "Dbq=C:\_Stuff\test\" & _
                 ";Extensions=asc,csv,tab,txt;FIL=text;Persist Security Info=False"

    cConnection.Open sConnStrP1

    'create new columns based on "week" column
    '  1*(....) coerces to number
    SQL = "SELECT [week], 1*(right(week,2)) as wk_num, 1*(mid(week,3,4)) as year FROM [week.txt]"

    Set rsRecordset = cConnection.Execute(SQL)

    'drop to sheet...
    With ActiveSheet.Range("D5")
        For i = 0 To rsRecordset.Fields.Count - 1
            .Offset(0, i).Value = rsRecordset.Fields(i).Name
        Next i
        .Offset(1, 0).CopyFromRecordset rsRecordset
    End With


End Sub
22.05.2014
  • pyetja ime sql po zgjedh të dhëna të tëra nga një CSV, të cilat më vonë do të përdoren për të krijuar një tabelë kryesore. Unë nuk shoh që ju zgjidhni të dhënat csv, por ju keni përcaktuar vetëm një pyetje të zgjedhur për të kërkuar kolonën e javës dhe për të krijuar kolonat e vitit dhe numrit të javës. Unë nuk po hedh asnjë të dhënë në fletën e punës, por po krijoj një pivotcache të jashtme dhe e përdor atë për të krijuar një tabelë kryesore. Arsyeja që nuk po i shtoja kolonat burimit csv, sepse janë ~ 1 milion rreshta dhe nuk di si ta bëj. Unë dua kolonat shtesë të numrit të javës dhe vitit në grupin e të dhënave në mënyrë që ato të shfaqen dhe të mund të përdoren në tabelën kryesore. 23.05.2014
  • Faleminderit Tim, redaktimi i pyetjes SQL funksionoi. SQL = SELECT *, [javë], 1*(djathtas(javë,2)) si Numri i javës, 1*(mes(javë,3,4)) si Viti FROM [ & sFileName & ] '[week.txt] 23.05.2014
  • Gëzohem që e keni arritur të funksionojë - shembulli im ishte vetëm për të ilustruar qasjen e përgjithshme: e di që po bëni diçka ndryshe me të dhënat tuaja. 23.05.2014
  • Po, unë kam të dhëna për shitjet e produktit në treg për 3 vjet, domethënë që përfshin 156 javë, të cilat dua t'i vendos disi siç duhet brenda 52 javëve vetëm pasi ideja është që një produkt i ri sapo të lançohet do të funksionojë jo më shumë se 52 javë. mund të ketë boshllëqe (boshllëqe d.m.th. pa shitje) në mes të disa javëve, por numri total i javëve të shitjeve nuk do të kalojë 52 javë në 3 vjet. Logjika është që çdo shitje produkti që fillon nga java e fillimit, d.m.th. w 2011 01, por javët totale të shitjeve numërohen ‹52, atëherë do të thotë se është lançuar vitin e kaluar, kështu që disa javë shitjesh janë në vitin e kaluar. 23.05.2014
  • Në një skenar të tillë, e gjithë kjo javë shitjesh zhvendoset për të filluar nga kolona e javës: 52-Numri i javëve të shitjeve +1. A keni ndonjë ide se si ta zbatoni këtë në pyetjen SQL si një kolonë tjetër e quajtur "Java e Re"? 23.05.2014
  • Nuk jam i sigurt që ju ndjek saktësisht, por mund të krijoni një kolonë javësh kumulative: nëse e dini vitin e parë të të dhënave tuaja, atëherë cum_wks = (year-year_1)*12 + wk_num Nëse mund të ndani disa të dhëna të rreme të mostrës me rezultatin e pritur, kjo do të ishte e dobishme. 23.05.2014
  • Unë kam postuar këtu duke përfshirë një pamje të ekranit të asaj që dua. Nëse mund të ndani emailin tuaj, unë mund t'ju dërgoj një skedar mostër. stackoverflow.com/ pyetje/23825905/ 23.05.2014
  • Le të të vazhdojmë këtë diskutim në chat. 23.05.2014
  • Jam i zhgënjyer. E zgjidhi problemin e këtij përdoruesi, por nuk iu përgjigj pyetjes që bëri. Unë kam nevojë për përgjigjen e pyetjes origjinale! Pse nuk funksionoi Fields.Append? :-p 05.10.2017
  • Disa gjëra thjesht nuk mbështeten? Pse nuk mbështeten është një pyetje tjetër, por jo një pyetje që zakonisht tërheq shumë këtu 'sepse kush e di vërtet? 06.10.2017
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..